diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index f62bda84176c..3cfa3d1052b1 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -253,7 +253,7 @@ - + - + + Always + + + Always + diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureClientPlugin.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureClientPlugin.cs index 73a3a83a2dba..aed8546918be 100644 --- a/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureClientPlugin.cs +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureClientPlugin.cs @@ -5,9 +5,8 @@ using Microsoft.Generator.CSharp; using Microsoft.Generator.CSharp.ClientModel; using System; -using System.ClientModel; -using System.Collections.Generic; using System.ComponentModel.Composition; +using System.IO; namespace Azure.Generator; @@ -46,6 +45,8 @@ public override void Configure() { base.Configure(); AddMetadataReference(MetadataReference.CreateFromFile(typeof(Response).Assembly.Location)); + var sharedSourceDirectory = Path.Combine(Path.GetDirectoryName(typeof(AzureClientPlugin).Assembly.Location)!, "Shared", "Core"); + AddSharedSourceDirectory(sharedSourceDirectory); } /// diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureTypeFactory.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureTypeFactory.cs index 19fd71e19deb..070aca4a2cf5 100644 --- a/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureTypeFactory.cs +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/AzureTypeFactory.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Azure.Core; using Azure.Generator.Primitives; using Azure.Generator.Providers; using Azure.Generator.Providers.Abstraction; @@ -18,9 +17,6 @@ public class AzureTypeFactory : ScmTypeFactory /// public override CSharpType KeyCredentialType => typeof(AzureKeyCredential); - /// - public override CSharpType ClientUriBuilderBaseType => typeof(RequestUriBuilder); - /// public override IClientResponseApi ClientResponseApi => AzureClientResponseProvider.Instance; diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs index 37f0f6278f65..b09ce221e158 100644 --- a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs @@ -21,6 +21,8 @@ public HttpRequestProvider(ValueExpression original) : base(typeof(Request), ori { } + public override Type UriBuilderType => typeof(RawRequestUriBuilder); + public override ValueExpression Content() => Original.Property(nameof(Request.Content)); diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/BasicTypeSpec.csproj b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/BasicTypeSpec.csproj index 9c72b193dd37..de5464ba7117 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/BasicTypeSpec.csproj +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/BasicTypeSpec.csproj @@ -18,5 +18,6 @@ + diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.RestClient.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.RestClient.cs index eb6682ff07e3..14f2109f5695 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.RestClient.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.RestClient.cs @@ -32,7 +32,7 @@ internal HttpMessage CreateSayHiRequest(string headParameter, string queryParame HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/hello", false); uri.AppendQuery("queryParameter", queryParameter, true); @@ -51,7 +51,7 @@ internal HttpMessage CreateHelloAgainRequest(string p2, string p1, RequestConten HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/againHi/", false); uri.AppendPath(p2, true); @@ -68,7 +68,7 @@ internal HttpMessage CreateNoContentTypeRequest(string p2, string p1, RequestCon HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/noContentType/", false); uri.AppendPath(p2, true); @@ -85,7 +85,7 @@ internal HttpMessage CreateHelloDemo2Request(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/demoHi", false); request.Uri = uri; @@ -98,7 +98,7 @@ internal HttpMessage CreateCreateLiteralRequest(RequestContent content, RequestC HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/literal", false); request.Uri = uri; @@ -113,7 +113,7 @@ internal HttpMessage CreateHelloLiteralRequest(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/helloLiteral/", false); uri.AppendPath(123.ToString(), true); @@ -129,7 +129,7 @@ internal HttpMessage CreateTopActionRequest(DateTimeOffset action, RequestContex HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/top/", false); uri.AppendPath(action.ToString("O"), true); @@ -143,7 +143,7 @@ internal HttpMessage CreateTopAction2Request(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/top2", false); request.Uri = uri; @@ -156,7 +156,7 @@ internal HttpMessage CreatePatchActionRequest(RequestContent content, RequestCon HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Patch; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/patch", false); request.Uri = uri; @@ -171,7 +171,7 @@ internal HttpMessage CreateAnonymousBodyRequest(RequestContent content, RequestC HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/anonymousBody", false); request.Uri = uri; @@ -186,7 +186,7 @@ internal HttpMessage CreateFriendlyModelRequest(RequestContent content, RequestC HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/friendlyName", false); request.Uri = uri; @@ -201,7 +201,7 @@ internal HttpMessage CreateAddTimeHeaderRequest(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier204); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/", false); request.Uri = uri; @@ -214,7 +214,7 @@ internal HttpMessage CreateProjectedNameModelRequest(RequestContent content, Req HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/projectedName", false); request.Uri = uri; @@ -229,7 +229,7 @@ internal HttpMessage CreateReturnsAnonymousModelRequest(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/returnsAnonymousModel", false); request.Uri = uri; @@ -242,7 +242,7 @@ internal HttpMessage CreateGetUnknownValueRequest(string accept, RequestContext HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/unknown-value", false); request.Uri = uri; @@ -255,7 +255,7 @@ internal HttpMessage CreateInternalProtocolRequest(RequestContent content, Reque HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier200); Request request = message.Request; request.Method = RequestMethod.Post; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/internalProtocol", false); request.Uri = uri; @@ -270,7 +270,7 @@ internal HttpMessage CreateStillConvenientRequest(RequestContext context) HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier204); Request request = message.Request; request.Method = RequestMethod.Get; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/stillConvenient", false); request.Uri = uri; @@ -282,7 +282,7 @@ internal HttpMessage CreateHeadAsBooleanRequest(string id, RequestContext contex HttpMessage message = Pipeline.CreateMessage(context, PipelineMessageClassifier2xxAnd4xx); Request request = message.Request; request.Method = RequestMethod.Head; - ClientUriBuilder uri = new ClientUriBuilder(); + RawRequestUriBuilder uri = new RawRequestUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/headAsBoolean/", false); uri.AppendPath(id, true); diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.cs index fb986e80a8bd..48c675a8926d 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClient.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Azure; using Azure.Core; @@ -51,7 +52,7 @@ public BasicTypeSpecClient(Uri endpoint, AzureKeyCredential keyCredential, Basic _endpoint = endpoint; _keyCredential = keyCredential; - Pipeline = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { new Azure.Core.AzureKeyCredentialPolicy(_keyCredential, AuthorizationHeader) }); + Pipeline = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { new AzureKeyCredentialPolicy(_keyCredential, AuthorizationHeader) }); } /// The HTTP pipeline for sending and receiving REST requests and responses. @@ -72,7 +73,7 @@ public BasicTypeSpecClient(Uri endpoint, AzureKeyCredential keyCredential, Basic /// or is null. /// Service returned a non-success status code. /// The response returned from the service. - public virtual Response SayHi(string headParameter, string queryParameter, string optionalQuery, RequestContext context = null) + public virtual Response SayHi(string headParameter, string queryParameter, string optionalQuery, RequestContext context) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); @@ -96,7 +97,7 @@ public virtual Response SayHi(string headParameter, string queryParameter, strin /// or is null. /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task SayHiAsync(string headParameter, string queryParameter, string optionalQuery, RequestContext context = null) + public virtual async Task SayHiAsync(string headParameter, string queryParameter, string optionalQuery, RequestContext context) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); @@ -116,7 +117,7 @@ public virtual Response SayHi(string headParameter, string queryParameter Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - Response result = SayHi(headParameter, queryParameter, optionalQuery, null); + Response result = SayHi(headParameter, queryParameter, optionalQuery, context: null); return Response.FromValue((Thing)result, result); } @@ -124,14 +125,15 @@ public virtual Response SayHi(string headParameter, string queryParameter /// /// /// + /// The cancellation token that can be used to cancel the operation. /// or is null. /// Service returned a non-success status code. - public virtual async Task> SayHiAsync(string headParameter, string queryParameter, string optionalQuery = null) + public virtual async Task> SayHiAsync(string headParameter, string queryParameter, string optionalQuery = null, CancellationToken cancellationToken = default) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - Response result = await SayHiAsync(headParameter, queryParameter, optionalQuery, null).ConfigureAwait(false); + Response result = await SayHiAsync(headParameter, queryParameter, optionalQuery, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -197,7 +199,7 @@ public virtual Response HelloAgain(string p2, string p1, RoundTr Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(action, nameof(action)); - Response result = HelloAgain(p2, p1, action, null); + Response result = HelloAgain(p2, p1, action, context: null); return Response.FromValue((RoundTripModel)result, result); } @@ -205,15 +207,16 @@ public virtual Response HelloAgain(string p2, string p1, RoundTr /// /// /// + /// The cancellation token that can be used to cancel the operation. /// , or is null. /// Service returned a non-success status code. - public virtual async Task> HelloAgainAsync(string p2, string p1, RoundTripModel action) + public virtual async Task> HelloAgainAsync(string p2, string p1, RoundTripModel action, CancellationToken cancellationToken = default) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(action, nameof(action)); - Response result = await HelloAgainAsync(p2, p1, action, null).ConfigureAwait(false); + Response result = await HelloAgainAsync(p2, p1, action, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((RoundTripModel)result, result); } @@ -305,15 +308,16 @@ public virtual async Task HelloDemo2Async(RequestContext context) /// Service returned a non-success status code. public virtual Response HelloDemo2() { - Response result = HelloDemo2(null); + Response result = HelloDemo2(context: null); return Response.FromValue((Thing)result, result); } /// Return hi in demo2. + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task> HelloDemo2Async() + public virtual async Task> HelloDemo2Async(CancellationToken cancellationToken = default) { - Response result = await HelloDemo2Async(null).ConfigureAwait(false); + Response result = await HelloDemo2Async(cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -367,19 +371,20 @@ public virtual Response CreateLiteral(Thing body) { Argument.AssertNotNull(body, nameof(body)); - Response result = CreateLiteral(body, null); + Response result = CreateLiteral(body, context: null); return Response.FromValue((Thing)result, result); } /// Create with literal value. /// + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task> CreateLiteralAsync(Thing body) + public virtual async Task> CreateLiteralAsync(Thing body, CancellationToken cancellationToken = default) { Argument.AssertNotNull(body, nameof(body)); - Response result = await CreateLiteralAsync(body, null).ConfigureAwait(false); + Response result = await CreateLiteralAsync(body, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -421,15 +426,16 @@ public virtual async Task HelloLiteralAsync(RequestContext context) /// Service returned a non-success status code. public virtual Response HelloLiteral() { - Response result = HelloLiteral(null); + Response result = HelloLiteral(context: null); return Response.FromValue((Thing)result, result); } /// Send literal parameters. + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task> HelloLiteralAsync() + public virtual async Task> HelloLiteralAsync(CancellationToken cancellationToken = default) { - Response result = await HelloLiteralAsync(null).ConfigureAwait(false); + Response result = await HelloLiteralAsync(cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -474,16 +480,17 @@ public virtual async Task TopActionAsync(DateTimeOffset action, Reques /// Service returned a non-success status code. public virtual Response TopAction(DateTimeOffset action) { - Response result = TopAction(action, null); + Response result = TopAction(action, context: null); return Response.FromValue((Thing)result, result); } /// top level method. /// + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task> TopActionAsync(DateTimeOffset action) + public virtual async Task> TopActionAsync(DateTimeOffset action, CancellationToken cancellationToken = default) { - Response result = await TopActionAsync(action, null).ConfigureAwait(false); + Response result = await TopActionAsync(action, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -642,7 +649,7 @@ public virtual Response AnonymousBody(string name, BinaryData requiredUni optionalNullableList?.ToList() as IList ?? new ChangeTrackingList(), requiredNullableList?.ToList() as IList ?? new ChangeTrackingList(), null); - Response result = AnonymousBody(spreadModel, null); + Response result = AnonymousBody(spreadModel, context: null); return Response.FromValue((Thing)result, result); } @@ -660,9 +667,10 @@ public virtual Response AnonymousBody(string name, BinaryData requiredUni /// optional literal float. /// optional literal bool. /// optional nullable collection. + /// The cancellation token that can be used to cancel the operation. /// , or is null. /// Service returned a non-success status code. - public virtual async Task> AnonymousBodyAsync(string name, BinaryData requiredUnion, ThingRequiredLiteralString requiredLiteralString, ThingRequiredLiteralInt requiredLiteralInt, ThingRequiredLiteralFloat requiredLiteralFloat, bool requiredLiteralBool, string requiredBadDescription, IEnumerable requiredNullableList, ThingOptionalLiteralString? optionalLiteralString = default, ThingOptionalLiteralInt? optionalLiteralInt = default, ThingOptionalLiteralFloat? optionalLiteralFloat = default, bool? optionalLiteralBool = default, IEnumerable optionalNullableList = default) + public virtual async Task> AnonymousBodyAsync(string name, BinaryData requiredUnion, ThingRequiredLiteralString requiredLiteralString, ThingRequiredLiteralInt requiredLiteralInt, ThingRequiredLiteralFloat requiredLiteralFloat, bool requiredLiteralBool, string requiredBadDescription, IEnumerable requiredNullableList, ThingOptionalLiteralString? optionalLiteralString = default, ThingOptionalLiteralInt? optionalLiteralInt = default, ThingOptionalLiteralFloat? optionalLiteralFloat = default, bool? optionalLiteralBool = default, IEnumerable optionalNullableList = default, CancellationToken cancellationToken = default) { Argument.AssertNotNull(name, nameof(name)); Argument.AssertNotNull(requiredUnion, nameof(requiredUnion)); @@ -683,7 +691,7 @@ public virtual async Task> AnonymousBodyAsync(string name, Binar optionalNullableList?.ToList() as IList ?? new ChangeTrackingList(), requiredNullableList?.ToList() as IList ?? new ChangeTrackingList(), null); - Response result = await AnonymousBodyAsync(spreadModel, null).ConfigureAwait(false); + Response result = await AnonymousBodyAsync(spreadModel, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -738,20 +746,21 @@ public virtual Response FriendlyModel(string name) Argument.AssertNotNull(name, nameof(name)); Friend spreadModel = new Friend(name, null); - Response result = FriendlyModel(spreadModel, null); + Response result = FriendlyModel(spreadModel, context: null); return Response.FromValue((Friend)result, result); } /// Model can have its friendly name. /// name of the NotFriend. + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task> FriendlyModelAsync(string name) + public virtual async Task> FriendlyModelAsync(string name, CancellationToken cancellationToken = default) { Argument.AssertNotNull(name, nameof(name)); Friend spreadModel = new Friend(name, null); - Response result = await FriendlyModelAsync(spreadModel, null).ConfigureAwait(false); + Response result = await FriendlyModelAsync(spreadModel, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Friend)result, result); } @@ -793,14 +802,15 @@ public virtual async Task AddTimeHeaderAsync(RequestContext context) /// Service returned a non-success status code. public virtual Response AddTimeHeader() { - return AddTimeHeader(null); + return AddTimeHeader(context: null); } /// addTimeHeader. + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task AddTimeHeaderAsync() + public virtual async Task AddTimeHeaderAsync(CancellationToken cancellationToken = default) { - return await AddTimeHeaderAsync(null).ConfigureAwait(false); + return await AddTimeHeaderAsync(cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); } /// @@ -854,20 +864,21 @@ public virtual Response ProjectedNameModel(string name) Argument.AssertNotNull(name, nameof(name)); ProjectedModel spreadModel = new ProjectedModel(name, null); - Response result = ProjectedNameModel(spreadModel, null); + Response result = ProjectedNameModel(spreadModel, context: null); return Response.FromValue((ProjectedModel)result, result); } /// Model can have its projected name. /// name of the ModelWithProjectedName. + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task> ProjectedNameModelAsync(string name) + public virtual async Task> ProjectedNameModelAsync(string name, CancellationToken cancellationToken = default) { Argument.AssertNotNull(name, nameof(name)); ProjectedModel spreadModel = new ProjectedModel(name, null); - Response result = await ProjectedNameModelAsync(spreadModel, null).ConfigureAwait(false); + Response result = await ProjectedNameModelAsync(spreadModel, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((ProjectedModel)result, result); } @@ -909,15 +920,16 @@ public virtual async Task ReturnsAnonymousModelAsync(RequestContext co /// Service returned a non-success status code. public virtual Response ReturnsAnonymousModel() { - Response result = ReturnsAnonymousModel(null); + Response result = ReturnsAnonymousModel(context: null); return Response.FromValue((ReturnsAnonymousModelResponse)result, result); } /// return anonymous model. + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task> ReturnsAnonymousModelAsync() + public virtual async Task> ReturnsAnonymousModelAsync(CancellationToken cancellationToken = default) { - Response result = await ReturnsAnonymousModelAsync(null).ConfigureAwait(false); + Response result = await ReturnsAnonymousModelAsync(cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((ReturnsAnonymousModelResponse)result, result); } @@ -971,19 +983,20 @@ public virtual Response GetUnknownValue(string accept) { Argument.AssertNotNull(accept, nameof(accept)); - Response result = GetUnknownValue(accept, null); + Response result = GetUnknownValue(accept, context: null); return Response.FromValue(result.Content.ToObjectFromJson(), result); } /// get extensible enum. /// + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task> GetUnknownValueAsync(string accept) + public virtual async Task> GetUnknownValueAsync(string accept, CancellationToken cancellationToken = default) { Argument.AssertNotNull(accept, nameof(accept)); - Response result = await GetUnknownValueAsync(accept, null).ConfigureAwait(false); + Response result = await GetUnknownValueAsync(accept, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue(result.Content.ToObjectFromJson(), result); } @@ -1037,19 +1050,20 @@ public virtual Response InternalProtocol(Thing body) { Argument.AssertNotNull(body, nameof(body)); - Response result = InternalProtocol(body, null); + Response result = InternalProtocol(body, context: null); return Response.FromValue((Thing)result, result); } /// When set protocol false and convenient true, then the protocol method should be internal. /// + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task> InternalProtocolAsync(Thing body) + public virtual async Task> InternalProtocolAsync(Thing body, CancellationToken cancellationToken = default) { Argument.AssertNotNull(body, nameof(body)); - Response result = await InternalProtocolAsync(body, null).ConfigureAwait(false); + Response result = await InternalProtocolAsync(body, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return Response.FromValue((Thing)result, result); } @@ -1091,14 +1105,15 @@ public virtual async Task StillConvenientAsync(RequestContext context) /// Service returned a non-success status code. public virtual Response StillConvenient() { - return StillConvenient(null); + return StillConvenient(context: null); } /// When set protocol false and convenient true, the convenient method should be generated even it has the same signature as protocol one. + /// The cancellation token that can be used to cancel the operation. /// Service returned a non-success status code. - public virtual async Task StillConvenientAsync() + public virtual async Task StillConvenientAsync(CancellationToken cancellationToken = default) { - return await StillConvenientAsync(null).ConfigureAwait(false); + return await StillConvenientAsync(cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); } /// @@ -1151,18 +1166,19 @@ public virtual Response HeadAsBoolean(string id) { Argument.AssertNotNull(id, nameof(id)); - return HeadAsBoolean(id, null); + return HeadAsBoolean(id, context: null); } /// head as boolean. /// + /// The cancellation token that can be used to cancel the operation. /// is null. /// Service returned a non-success status code. - public virtual async Task HeadAsBooleanAsync(string id) + public virtual async Task HeadAsBooleanAsync(string id, CancellationToken cancellationToken = default) { Argument.AssertNotNull(id, nameof(id)); - return await HeadAsBooleanAsync(id, null).ConfigureAwait(false); + return await HeadAsBooleanAsync(id, cancellationToken.CanBeCanceled ? new RequestContext { CancellationToken = cancellationToken } : null).ConfigureAwait(false); } } } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientUriBuilder.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientUriBuilder.cs deleted file mode 100644 index 86b06504d0c8..000000000000 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientUriBuilder.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Azure.Core; - -namespace BasicTypeSpec -{ - internal partial class ClientUriBuilder : RequestUriBuilder - { - private UriBuilder _uriBuilder; - private StringBuilder _pathBuilder; - private StringBuilder _queryBuilder; - - public ClientUriBuilder() - { - } - - private UriBuilder UriBuilder => _uriBuilder ??= new UriBuilder(); - - private StringBuilder PathBuilder => _pathBuilder ??= new StringBuilder(UriBuilder.Path); - - private StringBuilder QueryBuilder => _queryBuilder ??= new StringBuilder(UriBuilder.Query); - - public void AppendQueryDelimited(string name, IEnumerable value, string delimiter, bool escape = true) - { - IEnumerable stringValues = value.Select(v => TypeFormatters.ConvertToString(v)); - AppendQuery(name, string.Join(delimiter, stringValues), escape); - } - - public void AppendQueryDelimited(string name, IEnumerable value, string delimiter, string format, bool escape = true) - { - IEnumerable stringValues = value.Select(v => TypeFormatters.ConvertToString(v, format)); - AppendQuery(name, string.Join(delimiter, stringValues), escape); - } - } -}