diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index dbfe17cde3b0..f7bba64fc777 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -243,7 +243,7 @@ - + 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 49988468dd99..e1041af28cf0 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 @@ -1,9 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Microsoft.CodeAnalysis; using Microsoft.Generator.CSharp; using Microsoft.Generator.CSharp.ClientModel; using System; +using System.ClientModel; +using System.Collections.Generic; using System.ComponentModel.Composition; namespace Azure.Generator; @@ -38,6 +41,7 @@ public AzureClientPlugin(GeneratorContext context) : base(context) public override void Configure() { base.Configure(); + AddMetadataReference(MetadataReference.CreateFromFile(typeof(Response).Assembly.Location)); } /// 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 662f9bea97ae..eccaceae0eb3 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,8 +1,12 @@ // 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; using Microsoft.Generator.CSharp.ClientModel; +using Microsoft.Generator.CSharp.ClientModel.Providers; using Microsoft.Generator.CSharp.Input; using Microsoft.Generator.CSharp.Primitives; @@ -11,6 +15,33 @@ namespace Azure.Generator /// public class AzureTypeFactory : ScmTypeFactory { + /// + public override CSharpType ClientUriBuilderBaseType => typeof(RequestUriBuilder); + + /// + public override IClientResponseApi ClientResponseApi => AzureClientResponseProvider.Instance; + + /// + public override IHttpResponseApi HttpResponseApi => AzureResponseProvider.Instance; + + /// + public override IClientPipelineApi ClientPipelineApi => HttpPipelineProvider.Instance; + + /// + public override IHttpMessageApi HttpMessageApi => HttpMessageProvider.Instance; + + /// + public override IExpressionApi HttpRequestApi => HttpRequestProvider.Instance; + + /// + public override IStatusCodeClassifierApi StatusCodeClassifierApi => StatusCodeClassifierProvider.Instance; + + /// + public override IRequestContentApi RequestContentApi => RequestContentProvider.Instance; + + /// + public override IHttpRequestOptionsApi HttpRequestOptionsApi => HttpRequestOptionsProvider.Instance; + /// protected override CSharpType? CreateCSharpTypeCore(InputType inputType) { diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureClientResponseProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureClientResponseProvider.cs new file mode 100644 index 000000000000..a47851a04548 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureClientResponseProvider.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Snippets; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers +{ + internal record AzureClientResponseProvider : ClientResponseApi + { + private static ClientResponseApi? _instance; + internal static ClientResponseApi Instance => _instance ??= new AzureClientResponseProvider(Empty); + + public AzureClientResponseProvider(ValueExpression original) : base(typeof(Response), original) + { + } + + public override CSharpType ClientResponseType => typeof(Response); + + public override CSharpType ClientResponseOfTType => typeof(Response<>); + + public override CSharpType ClientResponseExceptionType => typeof(RequestFailedException); + + public override ValueExpression CreateAsync(HttpResponseApi response) + => New.Instance(ClientResponseExceptionType, [response]); + + public override ClientResponseApi FromExpression(ValueExpression original) + => new AzureClientResponseProvider(original); + + public override ValueExpression FromResponse(ValueExpression valueExpression) => valueExpression; + + public override ValueExpression FromValue(ValueExpression valueExpression, HttpResponseApi response) + => Static(ClientResponseType).Invoke(nameof(FromValue), [valueExpression, response]); + + public override ValueExpression FromValue(ValueExpression valueExpression, HttpResponseApi response) + => Static(ClientResponseType).Invoke(nameof(FromValue), [valueExpression, response], [typeof(ValueType)], false); + + public override HttpResponseApi GetRawResponse() + => new AzureResponseProvider(GetRawResponseExpression()); + + public override ClientResponseApi ToExpression() => this; + + private ScopedApi GetRawResponseExpression() => Original.As(); + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureResponseProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureResponseProvider.cs new file mode 100644 index 000000000000..11517a6a7f2e --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/AzureResponseProvider.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Snippets; +using System; +using System.IO; + +namespace Azure.Generator.Providers +{ + internal record AzureResponseProvider : HttpResponseApi + { + private static HttpResponseApi? _instance; + internal static HttpResponseApi Instance => _instance ??= new AzureResponseProvider(Empty); + + public AzureResponseProvider(ValueExpression original) : base(typeof(Response), original) + { + } + + public override CSharpType HttpResponseType => typeof(Response); + + public override ScopedApi Content() + => Original.Property(nameof(Response.Content)).As(); + + public override ScopedApi ContentStream() + => Original.Property(nameof(Response.ContentStream)).As(); + + public override HttpResponseApi FromExpression(ValueExpression original) + => new AzureResponseProvider(original); + + public override ScopedApi IsError() + => Original.Property(nameof(Response.IsError)).As(); + + public override HttpResponseApi ToExpression() => this; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpMessageProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpMessageProvider.cs new file mode 100644 index 000000000000..43391c5ca039 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpMessageProvider.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Statements; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers +{ + internal record HttpMessageProvider : HttpMessageApi + { + private static HttpMessageApi? _instance; + internal static HttpMessageApi Instance => _instance ??= new HttpMessageProvider(Empty); + + public HttpMessageProvider(ValueExpression original) : base(typeof(HttpMessage), original) + { + } + + public override CSharpType HttpMessageType => typeof(HttpMessage); + + public override MethodBodyStatement Apply(ValueExpression options) + => MethodBodyStatement.Empty; + + public override ValueExpression BufferResponse() + => Original.Property(nameof(HttpMessage.BufferResponse)); + + public override MethodBodyStatement[] ExtractResponse() + => [Original.Invoke(nameof(HttpMessage.ExtractResponseContent)).Terminate(), Return(Original.Property(nameof(HttpMessage.Response)))]; + + public override HttpMessageApi FromExpression(ValueExpression original) + => new HttpMessageProvider(original); + + public override HttpRequestApi Request() + => new HttpRequestProvider(Original.Property(nameof(HttpMessage.Request))); + + public override HttpResponseApi Response() + => new AzureResponseProvider(Original.Property(nameof(HttpMessage.Response))); + + public override ValueExpression ResponseClassifier() + => Original.Property(nameof(HttpMessage.ResponseClassifier)); + + public override HttpMessageApi ToExpression() => this; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpPipelineProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpPipelineProvider.cs new file mode 100644 index 000000000000..5a1c2e40553c --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpPipelineProvider.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Azure.Core.Pipeline; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers.Abstraction +{ + internal record HttpPipelineProvider : ClientPipelineApi + { + private static ClientPipelineApi? _instance; + internal static ClientPipelineApi Instance => _instance ??= new HttpPipelineProvider(Empty); + + public HttpPipelineProvider(ValueExpression original) : base(typeof(HttpPipeline), original) + { + } + + public override CSharpType ClientPipelineType => typeof(HttpPipeline); + + public override CSharpType ClientPipelineOptionsType => typeof(ClientOptions); + + public override CSharpType PipelinePolicyType => typeof(HttpPipelinePolicy); + + public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies) + => Static(typeof(HttpPipelineBuilder)).Invoke(nameof(HttpPipelineBuilder.Build), [options, perRetryPolicies]); + + public override HttpMessageApi CreateMessage() + => new HttpMessageProvider(Original.Invoke(nameof(HttpPipeline.CreateMessage))); + + public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier) + => Original.Invoke(nameof(HttpPipeline.CreateMessage), requestOptions, responseClassifier).As(); + + public override ClientPipelineApi FromExpression(ValueExpression expression) + => new HttpPipelineProvider(expression); + + public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments) + => Empty; // TODO: implement with default retry policy for Azure + + public override InvokeMethodExpression Send(HttpMessageApi message) + => Original.Invoke(nameof(HttpPipeline.Send), [message, Default]); + + public override InvokeMethodExpression SendAsync(HttpMessageApi message) + => Original.Invoke(nameof(HttpPipeline.SendAsync), [message, Default], true); + + public override ClientPipelineApi ToExpression() => this; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestOptionsProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestOptionsProvider.cs new file mode 100644 index 000000000000..5a1240531892 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestOptionsProvider.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers.Abstraction +{ + internal record HttpRequestOptionsProvider : HttpRequestOptionsApi + { + private static HttpRequestOptionsApi? _instance; + internal static HttpRequestOptionsApi Instance => _instance ??= new HttpRequestOptionsProvider(Empty); + + public HttpRequestOptionsProvider(ValueExpression original) : base(typeof(RequestContext), original) + { + } + + public override CSharpType HttpRequestOptionsType => typeof(RequestContext); + + public override string ParameterName => "context"; + + public override ValueExpression ErrorOptions() + => Original.NullConditional().Property(nameof(RequestContext.ErrorOptions)); + + public override HttpRequestOptionsApi FromExpression(ValueExpression original) + => new HttpRequestOptionsProvider(original); + + public override ValueExpression NoThrow() + => FrameworkEnumValue(Azure.ErrorOptions.NoThrow); + + public override HttpRequestOptionsApi ToExpression() => this; + } +} 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 new file mode 100644 index 000000000000..060ae8050a73 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Snippets; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers +{ + internal record HttpRequestProvider : HttpRequestApi + { + private static HttpRequestApi? _instance; + internal static HttpRequestApi Instance => _instance ??= new HttpRequestProvider(Empty); + + public HttpRequestProvider(ValueExpression original) : base(typeof(Request), original) + { + } + + public override ValueExpression Content() + => Original.Property(nameof(Request.Content)); + + public override HttpRequestApi FromExpression(ValueExpression original) + => new HttpRequestProvider(original); + + public override InvokeMethodExpression SetHeaders(IReadOnlyList arguments) + => Original.Property(nameof(PipelineRequest.Headers)).Invoke(nameof(RequestHeaders.Add), arguments); + + public override AssignmentExpression SetMethod(string httpMethod) + => Original.Property(nameof(PipelineRequest.Method)).Assign(New.Instance(typeof(RequestMethod), [Literal(httpMethod)])); + + public override AssignmentExpression SetUri(ValueExpression value) + => Original.Property("Uri").Assign(value); + + public override HttpRequestApi ToExpression() => this; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/RequestContentProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/RequestContentProvider.cs new file mode 100644 index 000000000000..8fbd2922aeda --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/RequestContentProvider.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Snippets; +using Microsoft.Generator.CSharp.Statements; +using System.ClientModel.Primitives; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers +{ + internal record RequestContentProvider : RequestContentApi + { + private static RequestContentApi? _instance; + internal static RequestContentApi Instance => _instance ??= new RequestContentProvider(Empty); + + public RequestContentProvider(ValueExpression original) : base(typeof(RequestContent), original) + { + } + + public override CSharpType RequestContentType => typeof(RequestContent); + + public override RequestContentApi FromExpression(ValueExpression original) + => new RequestContentProvider(original); + + public override RequestContentApi ToExpression() => this; + + public override MethodBodyStatement[] Create(ValueExpression argument) + => [ + Declare("content", New.Instance(), out ScopedApi content), + content.Property("JsonWriter").Invoke("WriteObjectValue", [argument, Static().Property("WireOptions").As()]).Terminate(), + Return(content) + ]; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/StatusCodeClassifierProvider.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/StatusCodeClassifierProvider.cs new file mode 100644 index 000000000000..090faa94c332 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/StatusCodeClassifierProvider.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Primitives; +using static Microsoft.Generator.CSharp.Snippets.Snippet; + +namespace Azure.Generator.Providers.Abstraction +{ + internal record StatusCodeClassifierProvider : StatusCodeClassifierApi + { + private static StatusCodeClassifierApi? _instance; + internal static StatusCodeClassifierApi Instance => _instance ??= new StatusCodeClassifierProvider(Empty); + + public StatusCodeClassifierProvider(ValueExpression original) : base(typeof(StatusCodeClassifier), original) + { + } + + public override CSharpType ResponseClassifierType => typeof(ResponseClassifier); + + public override ValueExpression Create(int code) + => New.Instance(typeof(StatusCodeClassifier), [New.Array(typeof(ushort), true, true, [Literal(code)])]); + + public override StatusCodeClassifierApi FromExpression(ValueExpression original) + => new StatusCodeClassifierProvider(original); + + public override StatusCodeClassifierApi ToExpression() => this; + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/test/Azure.Generator.Tests.csproj b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Azure.Generator.Tests.csproj index 3ec6d60daa49..c837d9c3531e 100644 --- a/eng/packages/http-client-csharp/generator/Azure.Generator/test/Azure.Generator.Tests.csproj +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Azure.Generator.Tests.csproj @@ -18,5 +18,15 @@ PreserveNewest + + + + + + + + PreserveNewest + + diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/test/Common/Helpers.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Common/Helpers.cs new file mode 100644 index 000000000000..4bbe181fc721 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Common/Helpers.cs @@ -0,0 +1,60 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace Azure.Generator.Tests.Common +{ + internal static class Helpers + { + private static readonly string _assemblyLocation = Path.GetDirectoryName(typeof(Helpers).Assembly.Location)!; + + public static string GetExpectedFromFile(string? parameters = null) + { + return File.ReadAllText(GetAssetFileOrDirectoryPath(true, parameters)).Replace("\r\n", "\n"); + } + + private static string GetAssetFileOrDirectoryPath(bool isFile, string? parameters = null) + { + var stackTrace = new StackTrace(); + var stackFrame = GetRealMethodInvocation(stackTrace); + var method = stackFrame.GetMethod(); + var callingClass = method!.DeclaringType; + var nsSplit = callingClass!.Namespace!.Split('.'); + var paramString = parameters is null ? string.Empty : $"({parameters})"; + var extName = isFile ? ".cs" : string.Empty; + var path = _assemblyLocation; + var nsSkip = 3; + for (int i = nsSkip; i < nsSplit.Length; i++) + { + path = Path.Combine(path, nsSplit[i]); + } + return Path.Combine(path, "TestData", callingClass.Name, $"{method.Name}{paramString}{extName}"); + } + + private static StackFrame GetRealMethodInvocation(StackTrace stackTrace) + { + int i = 1; + while (i < stackTrace.FrameCount) + { + var frame = stackTrace.GetFrame(i); + var declaringType = frame!.GetMethod()!.DeclaringType!; + // we need to skip those method invocations from this class, or from the async state machine when the caller is an async method + if (declaringType != typeof(Helpers) && declaringType.Name != "MockHelpers" && !IsCompilerGenerated(declaringType)) + { + return frame; + } + i++; + } + + throw new InvalidOperationException($"There is no method invocation outside the {typeof(Helpers)} class in the stack trace"); + + static bool IsCompilerGenerated(Type type) + { + return type.IsDefined(typeof(CompilerGeneratedAttribute), false) || (type.Namespace?.StartsWith("System.Runtime.CompilerServices") ?? false) || + type.Name.StartsWith("<<", StringComparison.Ordinal); + } + } + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/AzureClientResponseProviderTests.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/AzureClientResponseProviderTests.cs new file mode 100644 index 000000000000..62b1c787fb31 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/AzureClientResponseProviderTests.cs @@ -0,0 +1,49 @@ +using Azure.Generator.Tests.Common; +using Azure.Generator.Tests.TestHelpers; +using Microsoft.Generator.CSharp.ClientModel.Providers; +using Microsoft.Generator.CSharp.ClientModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using System.ClientModel.Primitives; +using Azure.Generator.Providers; + +namespace Azure.Generator.Tests.Providers.Abstractions +{ + internal class AzureClientResponseProviderTests + { + [Test] + public void ValidateReturnTypeIsOverridden() + { + ClientProvider clientProvider = CreateMockClientProvider(); + + var method = clientProvider.Methods.FirstOrDefault(x => !x.Signature.Name.EndsWith("Async")); + Assert.NotNull(method); + Assert.NotNull(method!.Signature.ReturnType); + Assert.IsTrue(method!.Signature.ReturnType!.Equals(typeof(Response))); + } + + [Test] + public void ValidateBodyOfClientOperationIsOverridden() + { + var clientProvider = CreateMockClientProvider(); + + var method = clientProvider.Methods.FirstOrDefault(x => x.Signature.Parameters.Any(p => p.Type.Equals(typeof(RequestContext))) && !x.Signature.Name.EndsWith("Async")); + Assert.NotNull(method); + Assert.NotNull(method!.BodyStatements); + var test = method.BodyStatements!.ToDisplayString(); + Assert.AreEqual(Helpers.GetExpectedFromFile(), method.BodyStatements!.ToDisplayString()); + } + + private static ClientProvider CreateMockClientProvider() + { + var client = InputFactory.Client("TestClient", [InputFactory.Operation("foo")]); + MockHelpers.LoadMockPlugin(clientResponseApi: AzureClientResponseProvider.Instance); + var clientProvider = AzureClientPlugin.Instance.TypeFactory.CreateClient(client); + return clientProvider; + } + } +} diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/TestData/AzureClientResponseProviderTests/ValidateBodyOfClientOperationIsOverridden.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/TestData/AzureClientResponseProviderTests/ValidateBodyOfClientOperationIsOverridden.cs new file mode 100644 index 000000000000..e8bf29510dab --- /dev/null +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/test/Providers/Abstractions/TestData/AzureClientResponseProviderTests/ValidateBodyOfClientOperationIsOverridden.cs @@ -0,0 +1,2 @@ +using global::Azure.Core.HttpMessage message = this.CreateFooRequest(context); +return Pipeline.ProcessMessage(message, context); diff --git a/eng/packages/http-client-csharp/generator/Azure.Generator/test/TestHelpers/MockHelpers.cs b/eng/packages/http-client-csharp/generator/Azure.Generator/test/TestHelpers/MockHelpers.cs index dcce80fbaae4..1f2919f751f8 100644 --- a/eng/packages/http-client-csharp/generator/Azure.Generator/test/TestHelpers/MockHelpers.cs +++ b/eng/packages/http-client-csharp/generator/Azure.Generator/test/TestHelpers/MockHelpers.cs @@ -3,6 +3,7 @@ using Microsoft.Generator.CSharp; using Microsoft.Generator.CSharp.ClientModel; +using Microsoft.Generator.CSharp.ClientModel.Providers; using Microsoft.Generator.CSharp.Input; using Microsoft.Generator.CSharp.Primitives; using Microsoft.Generator.CSharp.Providers; @@ -28,7 +29,10 @@ public static Mock LoadMockPlugin( Func>? apiVersions = null, Func>? inputEnums = null, Func>? inputModels = null, - Func>? clients = null) + Func>? clients = null, + ClientResponseApi? clientResponseApi = null, + ClientPipelineApi? clientPipelineApi = null, + HttpMessageApi? httpMessageApi = null) { IReadOnlyList inputNsApiVersions = apiVersions?.Invoke() ?? []; IReadOnlyList inputNsEnums = inputEnums?.Invoke() ?? []; 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 358ee2ac9011..075aca94076a 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 @@ -11,6 +11,7 @@ - + + 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 b8bf3fd176a3..8f3177cdbe6a 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 @@ -6,30 +6,30 @@ #nullable disable using System; -using System.ClientModel; -using System.ClientModel.Primitives; +using Azure; +using Azure.Core; namespace BasicTypeSpec { /// public partial class BasicTypeSpecClient { - private static PipelineMessageClassifier _pipelineMessageClassifier200; - private static PipelineMessageClassifier _pipelineMessageClassifier204; + private static ResponseClassifier _pipelineMessageClassifier200; + private static ResponseClassifier _pipelineMessageClassifier204; private static Classifier2xxAnd4xx _pipelineMessageClassifier2xxAnd4xx; - private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + private static ResponseClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = new StatusCodeClassifier(stackalloc ushort[] { 200 }); - private static PipelineMessageClassifier PipelineMessageClassifier204 => _pipelineMessageClassifier204 = PipelineMessageClassifier.Create(stackalloc ushort[] { 204 }); + private static ResponseClassifier PipelineMessageClassifier204 => _pipelineMessageClassifier204 = new StatusCodeClassifier(stackalloc ushort[] { 204 }); private static Classifier2xxAnd4xx PipelineMessageClassifier2xxAnd4xx => _pipelineMessageClassifier2xxAnd4xx ??= new Classifier2xxAnd4xx(); - internal PipelineMessage CreateSayHiRequest(string headParameter, string queryParameter, string optionalQuery, RequestOptions options) + internal HttpMessage CreateSayHiRequest(string headParameter, string queryParameter, string optionalQuery, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/hello", false); @@ -38,314 +38,275 @@ internal PipelineMessage CreateSayHiRequest(string headParameter, string queryPa { uri.AppendQuery("optionalQuery", optionalQuery, true); } - request.Uri = uri.ToUri(); - request.Headers.Set("head-parameter", headParameter); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("head-parameter", headParameter); + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreateHelloAgainRequest(string p2, string p1, BinaryContent content, RequestOptions options) + internal HttpMessage CreateHelloAgainRequest(string p2, string p1, RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/againHi/", false); uri.AppendPath(p2, true); - request.Uri = uri.ToUri(); - request.Headers.Set("p1", p1); - request.Headers.Set("Content-Type", "text/plain"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("p1", p1); + request.Headers.Add("Content-Type", "text/plain"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateNoContentTypeRequest(string p2, string p1, BinaryContent content, RequestOptions options) + internal HttpMessage CreateNoContentTypeRequest(string p2, string p1, RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/noContentType/", false); uri.AppendPath(p2, true); - request.Uri = uri.ToUri(); - request.Headers.Set("p1", p1); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("p1", p1); + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateHelloDemo2Request(RequestOptions options) + internal HttpMessage CreateHelloDemo2Request(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/demoHi", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreateCreateLiteralRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreateCreateLiteralRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/literal", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateHelloLiteralRequest(RequestOptions options) + internal HttpMessage CreateHelloLiteralRequest(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/helloLiteral/", false); uri.AppendPath(123.ToString(), true); uri.AppendQuery("p3", TypeFormatters.ConvertToString(true, null), true); - request.Uri = uri.ToUri(); - request.Headers.Set("p1", "test"); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("p1", "test"); + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreateTopActionRequest(DateTimeOffset action, RequestOptions options) + internal HttpMessage CreateTopActionRequest(DateTimeOffset action, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/top/", false); uri.AppendPath(action.ToString("O"), true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreateTopAction2Request(RequestOptions options) + internal HttpMessage CreateTopAction2Request(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/top2", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreatePatchActionRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreatePatchActionRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "PATCH"; + Request request = message.Request; + request.Method = new RequestMethod("PATCH"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/patch", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateAnonymousBodyRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreateAnonymousBodyRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/anonymousBody", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateFriendlyModelRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreateFriendlyModelRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/friendlyName", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateAddTimeHeaderRequest(RequestOptions options) + internal HttpMessage CreateAddTimeHeaderRequest(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier204; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Repeatability-First-Sent", TypeFormatters.ConvertToString(DateTimeOffset.Now, "R")); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Repeatability-First-Sent", TypeFormatters.ConvertToString(DateTimeOffset.Now, "R")); return message; } - internal PipelineMessage CreateProjectedNameModelRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreateProjectedNameModelRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/projectedName", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateReturnsAnonymousModelRequest(RequestOptions options) + internal HttpMessage CreateReturnsAnonymousModelRequest(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/returnsAnonymousModel", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Accept", "application/json"); return message; } - internal PipelineMessage CreateGetUnknownValueRequest(string accept, RequestOptions options) + internal HttpMessage CreateGetUnknownValueRequest(string accept, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/unknown-value", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", accept); - message.Apply(options); + request.Uri = uri; + request.Headers.Add("Accept", accept); return message; } - internal PipelineMessage CreateInternalProtocolRequest(BinaryContent content, RequestOptions options) + internal HttpMessage CreateInternalProtocolRequest(RequestContent content, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; + Request request = message.Request; + request.Method = new RequestMethod("POST"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/internalProtocol", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Content-Type", "application/json"); - request.Headers.Set("Accept", "application/json"); + request.Uri = uri; + request.Headers.Add("Content-Type", "application/json"); + request.Headers.Add("Accept", "application/json"); request.Content = content; - message.Apply(options); return message; } - internal PipelineMessage CreateStillConvenientRequest(RequestOptions options) + internal HttpMessage CreateStillConvenientRequest(RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier204; - PipelineRequest request = message.Request; - request.Method = "GET"; + Request request = message.Request; + request.Method = new RequestMethod("GET"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/stillConvenient", false); - request.Uri = uri.ToUri(); - message.Apply(options); + request.Uri = uri; return message; } - internal PipelineMessage CreateHeadAsBooleanRequest(string id, RequestOptions options) + internal HttpMessage CreateHeadAsBooleanRequest(string id, RequestContext context) { - PipelineMessage message = Pipeline.CreateMessage(); + HttpMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier2xxAnd4xx; - PipelineRequest request = message.Request; - request.Method = "HEAD"; + Request request = message.Request; + request.Method = new RequestMethod("HEAD"); ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/headAsBoolean/", false); uri.AppendPath(id, true); - request.Uri = uri.ToUri(); - message.Apply(options); + request.Uri = uri; return message; } - private class Classifier2xxAnd4xx : PipelineMessageClassifier + private class Classifier2xxAnd4xx : ResponseClassifier { - public override bool TryClassify(PipelineMessage message, out bool isError) - { - isError = false; - if (message.Response == null) - { - return false; - } - isError = message.Response.Status switch - { - >= 200 and < 300 => false, - >= 400 and < 500 => false, - _ => true - }; - return true; - } - - public override bool TryClassify(PipelineMessage message, Exception exception, out bool isRetryable) - { - isRetryable = false; - return false; - } } } } 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 e03c8a59348d..20b2d3635f26 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 @@ -7,10 +7,12 @@ using System; using System.ClientModel; -using System.ClientModel.Primitives; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Azure; +using Azure.Core; +using Azure.Core.Pipeline; using BasicTypeSpec.Models; namespace BasicTypeSpec @@ -50,11 +52,11 @@ public BasicTypeSpecClient(Uri endpoint, ApiKeyCredential keyCredential, BasicTy _endpoint = endpoint; _keyCredential = keyCredential; - Pipeline = ClientPipeline.Create(options, Array.Empty(), new PipelinePolicy[] { ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(_keyCredential, AuthorizationHeader) }, Array.Empty()); + Pipeline = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { }); } /// The HTTP pipeline for sending and receiving REST requests and responses. - public ClientPipeline Pipeline { get; } + public HttpPipeline Pipeline { get; } /// /// [Protocol Method] Return hi @@ -67,17 +69,17 @@ public BasicTypeSpecClient(Uri endpoint, ApiKeyCredential keyCredential, BasicTy /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult SayHi(string headParameter, string queryParameter, string optionalQuery, RequestOptions options) + public virtual Response SayHi(string headParameter, string queryParameter, string optionalQuery, RequestContext context) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - using PipelineMessage message = CreateSayHiRequest(headParameter, queryParameter, optionalQuery, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateSayHiRequest(headParameter, queryParameter, optionalQuery, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -91,17 +93,17 @@ public virtual ClientResult SayHi(string headParameter, string queryParameter, s /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task SayHiAsync(string headParameter, string queryParameter, string optionalQuery, RequestOptions options) + public virtual async Task SayHiAsync(string headParameter, string queryParameter, string optionalQuery, RequestContext context) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - using PipelineMessage message = CreateSayHiRequest(headParameter, queryParameter, optionalQuery, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateSayHiRequest(headParameter, queryParameter, optionalQuery, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Return hi. @@ -109,14 +111,14 @@ public virtual async Task SayHiAsync(string headParameter, string /// /// /// or is null. - /// Service returned a non-success status code. - public virtual ClientResult SayHi(string headParameter, string queryParameter, string optionalQuery) + /// Service returned a non-success status code. + public virtual Response SayHi(string headParameter, string queryParameter, string optionalQuery) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - ClientResult result = SayHi(headParameter, queryParameter, optionalQuery, null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = SayHi(headParameter, queryParameter, optionalQuery, null); + return Response.FromValue((Thing)result, result); } /// Return hi. @@ -124,14 +126,14 @@ public virtual ClientResult SayHi(string headParameter, string queryParam /// /// /// or is null. - /// Service returned a non-success status code. - public virtual async Task> SayHiAsync(string headParameter, string queryParameter, string optionalQuery) + /// Service returned a non-success status code. + public virtual async Task> SayHiAsync(string headParameter, string queryParameter, string optionalQuery) { Argument.AssertNotNull(headParameter, nameof(headParameter)); Argument.AssertNotNull(queryParameter, nameof(queryParameter)); - ClientResult result = await SayHiAsync(headParameter, queryParameter, optionalQuery, null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await SayHiAsync(headParameter, queryParameter, optionalQuery, null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -145,18 +147,18 @@ public virtual async Task> SayHiAsync(string headParameter, /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// , or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult HelloAgain(string p2, string p1, BinaryContent content, RequestOptions options) + public virtual Response HelloAgain(string p2, string p1, RequestContent content, RequestContext context) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateHelloAgainRequest(p2, p1, content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateHelloAgainRequest(p2, p1, content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -170,18 +172,18 @@ public virtual ClientResult HelloAgain(string p2, string p1, BinaryContent conte /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// , or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task HelloAgainAsync(string p2, string p1, BinaryContent content, RequestOptions options) + public virtual async Task HelloAgainAsync(string p2, string p1, RequestContent content, RequestContext context) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateHelloAgainRequest(p2, p1, content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateHelloAgainRequest(p2, p1, content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Return hi again. @@ -189,15 +191,15 @@ public virtual async Task HelloAgainAsync(string p2, string p1, Bi /// /// /// , or is null. - /// Service returned a non-success status code. - public virtual ClientResult HelloAgain(string p2, string p1, RoundTripModel action) + /// Service returned a non-success status code. + public virtual Response HelloAgain(string p2, string p1, RoundTripModel action) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(action, nameof(action)); - ClientResult result = HelloAgain(p2, p1, action, null); - return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse()); + Response result = HelloAgain(p2, p1, action, null); + return Response.FromValue((RoundTripModel)result, result); } /// Return hi again. @@ -205,15 +207,15 @@ public virtual ClientResult HelloAgain(string p2, string p1, Rou /// /// /// , or is null. - /// Service returned a non-success status code. - public virtual async Task> HelloAgainAsync(string p2, string p1, RoundTripModel action) + /// Service returned a non-success status code. + public virtual async Task> HelloAgainAsync(string p2, string p1, RoundTripModel action) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(action, nameof(action)); - ClientResult result = await HelloAgainAsync(p2, p1, action, null).ConfigureAwait(false); - return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse()); + Response result = await HelloAgainAsync(p2, p1, action, null).ConfigureAwait(false); + return Response.FromValue((RoundTripModel)result, result); } /// @@ -227,18 +229,18 @@ public virtual async Task> HelloAgainAsync(string p /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// , or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult NoContentType(string p2, string p1, BinaryContent content, RequestOptions options) + public virtual Response NoContentType(string p2, string p1, RequestContent content, RequestContext context) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateNoContentTypeRequest(p2, p1, content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateNoContentTypeRequest(p2, p1, content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -252,18 +254,18 @@ public virtual ClientResult NoContentType(string p2, string p1, BinaryContent co /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// , or is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task NoContentTypeAsync(string p2, string p1, BinaryContent content, RequestOptions options) + public virtual async Task NoContentTypeAsync(string p2, string p1, RequestContent content, RequestContext context) { Argument.AssertNotNull(p2, nameof(p2)); Argument.AssertNotNull(p1, nameof(p1)); Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateNoContentTypeRequest(p2, p1, content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateNoContentTypeRequest(p2, p1, content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// @@ -274,13 +276,13 @@ public virtual async Task NoContentTypeAsync(string p2, string p1, /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult HelloDemo2(RequestOptions options) + public virtual Response HelloDemo2(RequestContext context) { - using PipelineMessage message = CreateHelloDemo2Request(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateHelloDemo2Request(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -291,29 +293,29 @@ public virtual ClientResult HelloDemo2(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task HelloDemo2Async(RequestOptions options) + public virtual async Task HelloDemo2Async(RequestContext context) { - using PipelineMessage message = CreateHelloDemo2Request(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateHelloDemo2Request(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Return hi in demo2. - /// Service returned a non-success status code. - public virtual ClientResult HelloDemo2() + /// Service returned a non-success status code. + public virtual Response HelloDemo2() { - ClientResult result = HelloDemo2(null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = HelloDemo2(null); + return Response.FromValue((Thing)result, result); } /// Return hi in demo2. - /// Service returned a non-success status code. - public virtual async Task> HelloDemo2Async() + /// Service returned a non-success status code. + public virtual async Task> HelloDemo2Async() { - ClientResult result = await HelloDemo2Async(null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await HelloDemo2Async(null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -325,16 +327,16 @@ public virtual async Task> HelloDemo2Async() /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult CreateLiteral(BinaryContent content, RequestOptions options) + public virtual Response CreateLiteral(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateCreateLiteralRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateCreateLiteralRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -346,40 +348,40 @@ public virtual ClientResult CreateLiteral(BinaryContent content, RequestOptions /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task CreateLiteralAsync(BinaryContent content, RequestOptions options) + public virtual async Task CreateLiteralAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateCreateLiteralRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateCreateLiteralRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Create with literal value. /// /// is null. - /// Service returned a non-success status code. - public virtual ClientResult CreateLiteral(Thing body) + /// Service returned a non-success status code. + public virtual Response CreateLiteral(Thing body) { Argument.AssertNotNull(body, nameof(body)); - ClientResult result = CreateLiteral(body, null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = CreateLiteral(body, null); + return Response.FromValue((Thing)result, result); } /// Create with literal value. /// /// is null. - /// Service returned a non-success status code. - public virtual async Task> CreateLiteralAsync(Thing body) + /// Service returned a non-success status code. + public virtual async Task> CreateLiteralAsync(Thing body) { Argument.AssertNotNull(body, nameof(body)); - ClientResult result = await CreateLiteralAsync(body, null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await CreateLiteralAsync(body, null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -390,13 +392,13 @@ public virtual async Task> CreateLiteralAsync(Thing body) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult HelloLiteral(RequestOptions options) + public virtual Response HelloLiteral(RequestContext context) { - using PipelineMessage message = CreateHelloLiteralRequest(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateHelloLiteralRequest(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -407,29 +409,29 @@ public virtual ClientResult HelloLiteral(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task HelloLiteralAsync(RequestOptions options) + public virtual async Task HelloLiteralAsync(RequestContext context) { - using PipelineMessage message = CreateHelloLiteralRequest(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateHelloLiteralRequest(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Send literal parameters. - /// Service returned a non-success status code. - public virtual ClientResult HelloLiteral() + /// Service returned a non-success status code. + public virtual Response HelloLiteral() { - ClientResult result = HelloLiteral(null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = HelloLiteral(null); + return Response.FromValue((Thing)result, result); } /// Send literal parameters. - /// Service returned a non-success status code. - public virtual async Task> HelloLiteralAsync() + /// Service returned a non-success status code. + public virtual async Task> HelloLiteralAsync() { - ClientResult result = await HelloLiteralAsync(null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await HelloLiteralAsync(null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -441,13 +443,13 @@ public virtual async Task> HelloLiteralAsync() /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult TopAction(DateTimeOffset action, RequestOptions options) + public virtual Response TopAction(DateTimeOffset action, RequestContext context) { - using PipelineMessage message = CreateTopActionRequest(action, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateTopActionRequest(action, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -459,31 +461,31 @@ public virtual ClientResult TopAction(DateTimeOffset action, RequestOptions opti /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task TopActionAsync(DateTimeOffset action, RequestOptions options) + public virtual async Task TopActionAsync(DateTimeOffset action, RequestContext context) { - using PipelineMessage message = CreateTopActionRequest(action, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateTopActionRequest(action, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// top level method. /// - /// Service returned a non-success status code. - public virtual ClientResult TopAction(DateTimeOffset action) + /// Service returned a non-success status code. + public virtual Response TopAction(DateTimeOffset action) { - ClientResult result = TopAction(action, null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = TopAction(action, null); + return Response.FromValue((Thing)result, result); } /// top level method. /// - /// Service returned a non-success status code. - public virtual async Task> TopActionAsync(DateTimeOffset action) + /// Service returned a non-success status code. + public virtual async Task> TopActionAsync(DateTimeOffset action) { - ClientResult result = await TopActionAsync(action, null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await TopActionAsync(action, null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -494,13 +496,13 @@ public virtual async Task> TopActionAsync(DateTimeOffset act /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult TopAction2(RequestOptions options) + public virtual Response TopAction2(RequestContext context) { - using PipelineMessage message = CreateTopAction2Request(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateTopAction2Request(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -511,13 +513,13 @@ public virtual ClientResult TopAction2(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task TopAction2Async(RequestOptions options) + public virtual async Task TopAction2Async(RequestContext context) { - using PipelineMessage message = CreateTopAction2Request(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateTopAction2Request(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// @@ -529,16 +531,16 @@ public virtual async Task TopAction2Async(RequestOptions options) /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult PatchAction(BinaryContent content, RequestOptions options) + public virtual Response PatchAction(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreatePatchActionRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreatePatchActionRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -550,16 +552,16 @@ public virtual ClientResult PatchAction(BinaryContent content, RequestOptions op /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task PatchActionAsync(BinaryContent content, RequestOptions options) + public virtual async Task PatchActionAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreatePatchActionRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreatePatchActionRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// @@ -571,16 +573,16 @@ public virtual async Task PatchActionAsync(BinaryContent content, /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult AnonymousBody(BinaryContent content, RequestOptions options) + public virtual Response AnonymousBody(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateAnonymousBodyRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateAnonymousBodyRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -592,16 +594,16 @@ public virtual ClientResult AnonymousBody(BinaryContent content, RequestOptions /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task AnonymousBodyAsync(BinaryContent content, RequestOptions options) + public virtual async Task AnonymousBodyAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateAnonymousBodyRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateAnonymousBodyRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// body parameter without body decorator. @@ -619,8 +621,8 @@ public virtual async Task AnonymousBodyAsync(BinaryContent content /// optional literal bool. /// optional nullable collection. /// , or is null. - /// Service returned a non-success status code. - public virtual ClientResult AnonymousBody(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) + /// Service returned a non-success status code. + public virtual Response AnonymousBody(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) { Argument.AssertNotNull(name, nameof(name)); Argument.AssertNotNull(requiredUnion, nameof(requiredUnion)); @@ -641,8 +643,8 @@ public virtual ClientResult AnonymousBody(string name, BinaryData require optionalNullableList?.ToList() as IList ?? new ChangeTrackingList(), requiredNullableList?.ToList() as IList ?? new ChangeTrackingList(), null); - ClientResult result = AnonymousBody(spreadModel, null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = AnonymousBody(spreadModel, null); + return Response.FromValue((Thing)result, result); } /// body parameter without body decorator. @@ -660,8 +662,8 @@ public virtual ClientResult AnonymousBody(string name, BinaryData require /// optional literal bool. /// optional nullable collection. /// , 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) + /// 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) { Argument.AssertNotNull(name, nameof(name)); Argument.AssertNotNull(requiredUnion, nameof(requiredUnion)); @@ -682,8 +684,8 @@ public virtual async Task> AnonymousBodyAsync(string name, B optionalNullableList?.ToList() as IList ?? new ChangeTrackingList(), requiredNullableList?.ToList() as IList ?? new ChangeTrackingList(), null); - ClientResult result = await AnonymousBodyAsync(spreadModel, null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await AnonymousBodyAsync(spreadModel, null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -695,16 +697,16 @@ public virtual async Task> AnonymousBodyAsync(string name, B /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult FriendlyModel(BinaryContent content, RequestOptions options) + public virtual Response FriendlyModel(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateFriendlyModelRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateFriendlyModelRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -716,42 +718,42 @@ public virtual ClientResult FriendlyModel(BinaryContent content, RequestOptions /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task FriendlyModelAsync(BinaryContent content, RequestOptions options) + public virtual async Task FriendlyModelAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateFriendlyModelRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateFriendlyModelRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Model can have its friendly name. /// name of the NotFriend. /// is null. - /// Service returned a non-success status code. - public virtual ClientResult FriendlyModel(string name) + /// Service returned a non-success status code. + public virtual Response FriendlyModel(string name) { Argument.AssertNotNull(name, nameof(name)); Friend spreadModel = new Friend(name, null); - ClientResult result = FriendlyModel(spreadModel, null); - return ClientResult.FromValue((Friend)result, result.GetRawResponse()); + Response result = FriendlyModel(spreadModel, null); + return Response.FromValue((Friend)result, result); } /// Model can have its friendly name. /// name of the NotFriend. /// is null. - /// Service returned a non-success status code. - public virtual async Task> FriendlyModelAsync(string name) + /// Service returned a non-success status code. + public virtual async Task> FriendlyModelAsync(string name) { Argument.AssertNotNull(name, nameof(name)); Friend spreadModel = new Friend(name, null); - ClientResult result = await FriendlyModelAsync(spreadModel, null).ConfigureAwait(false); - return ClientResult.FromValue((Friend)result, result.GetRawResponse()); + Response result = await FriendlyModelAsync(spreadModel, null).ConfigureAwait(false); + return Response.FromValue((Friend)result, result); } /// @@ -762,13 +764,13 @@ public virtual async Task> FriendlyModelAsync(string name) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult AddTimeHeader(RequestOptions options) + public virtual Response AddTimeHeader(RequestContext context) { - using PipelineMessage message = CreateAddTimeHeaderRequest(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateAddTimeHeaderRequest(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -779,25 +781,25 @@ public virtual ClientResult AddTimeHeader(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task AddTimeHeaderAsync(RequestOptions options) + public virtual async Task AddTimeHeaderAsync(RequestContext context) { - using PipelineMessage message = CreateAddTimeHeaderRequest(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateAddTimeHeaderRequest(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// addTimeHeader. - /// Service returned a non-success status code. - public virtual ClientResult AddTimeHeader() + /// Service returned a non-success status code. + public virtual Response AddTimeHeader() { return AddTimeHeader(null); } /// addTimeHeader. - /// Service returned a non-success status code. - public virtual async Task AddTimeHeaderAsync() + /// Service returned a non-success status code. + public virtual async Task AddTimeHeaderAsync() { return await AddTimeHeaderAsync(null).ConfigureAwait(false); } @@ -811,16 +813,16 @@ public virtual async Task AddTimeHeaderAsync() /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult ProjectedNameModel(BinaryContent content, RequestOptions options) + public virtual Response ProjectedNameModel(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateProjectedNameModelRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateProjectedNameModelRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -832,42 +834,42 @@ public virtual ClientResult ProjectedNameModel(BinaryContent content, RequestOpt /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task ProjectedNameModelAsync(BinaryContent content, RequestOptions options) + public virtual async Task ProjectedNameModelAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateProjectedNameModelRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateProjectedNameModelRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// Model can have its projected name. /// name of the ModelWithProjectedName. /// is null. - /// Service returned a non-success status code. - public virtual ClientResult ProjectedNameModel(string name) + /// Service returned a non-success status code. + public virtual Response ProjectedNameModel(string name) { Argument.AssertNotNull(name, nameof(name)); ProjectedModel spreadModel = new ProjectedModel(name, null); - ClientResult result = ProjectedNameModel(spreadModel, null); - return ClientResult.FromValue((ProjectedModel)result, result.GetRawResponse()); + Response result = ProjectedNameModel(spreadModel, null); + return Response.FromValue((ProjectedModel)result, result); } /// Model can have its projected name. /// name of the ModelWithProjectedName. /// is null. - /// Service returned a non-success status code. - public virtual async Task> ProjectedNameModelAsync(string name) + /// Service returned a non-success status code. + public virtual async Task> ProjectedNameModelAsync(string name) { Argument.AssertNotNull(name, nameof(name)); ProjectedModel spreadModel = new ProjectedModel(name, null); - ClientResult result = await ProjectedNameModelAsync(spreadModel, null).ConfigureAwait(false); - return ClientResult.FromValue((ProjectedModel)result, result.GetRawResponse()); + Response result = await ProjectedNameModelAsync(spreadModel, null).ConfigureAwait(false); + return Response.FromValue((ProjectedModel)result, result); } /// @@ -878,13 +880,13 @@ public virtual async Task> ProjectedNameModelAsync( /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult ReturnsAnonymousModel(RequestOptions options) + public virtual Response ReturnsAnonymousModel(RequestContext context) { - using PipelineMessage message = CreateReturnsAnonymousModelRequest(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateReturnsAnonymousModelRequest(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -895,29 +897,29 @@ public virtual ClientResult ReturnsAnonymousModel(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task ReturnsAnonymousModelAsync(RequestOptions options) + public virtual async Task ReturnsAnonymousModelAsync(RequestContext context) { - using PipelineMessage message = CreateReturnsAnonymousModelRequest(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateReturnsAnonymousModelRequest(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// return anonymous model. - /// Service returned a non-success status code. - public virtual ClientResult ReturnsAnonymousModel() + /// Service returned a non-success status code. + public virtual Response ReturnsAnonymousModel() { - ClientResult result = ReturnsAnonymousModel(null); - return ClientResult.FromValue((ReturnsAnonymousModelResponse)result, result.GetRawResponse()); + Response result = ReturnsAnonymousModel(null); + return Response.FromValue((ReturnsAnonymousModelResponse)result, result); } /// return anonymous model. - /// Service returned a non-success status code. - public virtual async Task> ReturnsAnonymousModelAsync() + /// Service returned a non-success status code. + public virtual async Task> ReturnsAnonymousModelAsync() { - ClientResult result = await ReturnsAnonymousModelAsync(null).ConfigureAwait(false); - return ClientResult.FromValue((ReturnsAnonymousModelResponse)result, result.GetRawResponse()); + Response result = await ReturnsAnonymousModelAsync(null).ConfigureAwait(false); + return Response.FromValue((ReturnsAnonymousModelResponse)result, result); } /// @@ -929,16 +931,16 @@ public virtual async Task> ReturnsAn /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult GetUnknownValue(string accept, RequestOptions options) + public virtual Response GetUnknownValue(string accept, RequestContext context) { Argument.AssertNotNull(accept, nameof(accept)); - using PipelineMessage message = CreateGetUnknownValueRequest(accept, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateGetUnknownValueRequest(accept, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -950,40 +952,40 @@ public virtual ClientResult GetUnknownValue(string accept, RequestOptions option /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task GetUnknownValueAsync(string accept, RequestOptions options) + public virtual async Task GetUnknownValueAsync(string accept, RequestContext context) { Argument.AssertNotNull(accept, nameof(accept)); - using PipelineMessage message = CreateGetUnknownValueRequest(accept, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateGetUnknownValueRequest(accept, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// get extensible enum. /// /// is null. - /// Service returned a non-success status code. - public virtual ClientResult GetUnknownValue(string accept) + /// Service returned a non-success status code. + public virtual Response GetUnknownValue(string accept) { Argument.AssertNotNull(accept, nameof(accept)); - ClientResult result = GetUnknownValue(accept, null); - return ClientResult.FromValue(result.GetRawResponse().Content.ToObjectFromJson(), result.GetRawResponse()); + Response result = GetUnknownValue(accept, null); + return Response.FromValue(result.Content.ToObjectFromJson(), result); } /// get extensible enum. /// /// is null. - /// Service returned a non-success status code. - public virtual async Task> GetUnknownValueAsync(string accept) + /// Service returned a non-success status code. + public virtual async Task> GetUnknownValueAsync(string accept) { Argument.AssertNotNull(accept, nameof(accept)); - ClientResult result = await GetUnknownValueAsync(accept, null).ConfigureAwait(false); - return ClientResult.FromValue(result.GetRawResponse().Content.ToObjectFromJson(), result.GetRawResponse()); + Response result = await GetUnknownValueAsync(accept, null).ConfigureAwait(false); + return Response.FromValue(result.Content.ToObjectFromJson(), result); } /// @@ -995,16 +997,16 @@ public virtual async Task> GetUnknownValueAsync(string acce /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult InternalProtocol(BinaryContent content, RequestOptions options) + public virtual Response InternalProtocol(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateInternalProtocolRequest(content, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateInternalProtocolRequest(content, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -1016,40 +1018,40 @@ public virtual ClientResult InternalProtocol(BinaryContent content, RequestOptio /// /// /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task InternalProtocolAsync(BinaryContent content, RequestOptions options) + public virtual async Task InternalProtocolAsync(RequestContent content, RequestContext context) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateInternalProtocolRequest(content, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateInternalProtocolRequest(content, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// When set protocol false and convenient true, then the protocol method should be internal. /// /// is null. - /// Service returned a non-success status code. - public virtual ClientResult InternalProtocol(Thing body) + /// Service returned a non-success status code. + public virtual Response InternalProtocol(Thing body) { Argument.AssertNotNull(body, nameof(body)); - ClientResult result = InternalProtocol(body, null); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = InternalProtocol(body, null); + return Response.FromValue((Thing)result, result); } /// When set protocol false and convenient true, then the protocol method should be internal. /// /// is null. - /// Service returned a non-success status code. - public virtual async Task> InternalProtocolAsync(Thing body) + /// Service returned a non-success status code. + public virtual async Task> InternalProtocolAsync(Thing body) { Argument.AssertNotNull(body, nameof(body)); - ClientResult result = await InternalProtocolAsync(body, null).ConfigureAwait(false); - return ClientResult.FromValue((Thing)result, result.GetRawResponse()); + Response result = await InternalProtocolAsync(body, null).ConfigureAwait(false); + return Response.FromValue((Thing)result, result); } /// @@ -1060,13 +1062,13 @@ public virtual async Task> InternalProtocolAsync(Thing body) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult StillConvenient(RequestOptions options) + public virtual Response StillConvenient(RequestContext context) { - using PipelineMessage message = CreateStillConvenientRequest(options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateStillConvenientRequest(context); + return Pipeline.ProcessMessage(message, context); } /// @@ -1077,25 +1079,25 @@ public virtual ClientResult StillConvenient(RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task StillConvenientAsync(RequestOptions options) + public virtual async Task StillConvenientAsync(RequestContext context) { - using PipelineMessage message = CreateStillConvenientRequest(options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateStillConvenientRequest(context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// When set protocol false and convenient true, the convenient method should be generated even it has the same signature as protocol one. - /// Service returned a non-success status code. - public virtual ClientResult StillConvenient() + /// Service returned a non-success status code. + public virtual Response StillConvenient() { return StillConvenient(null); } /// When set protocol false and convenient true, the convenient method should be generated even it has the same signature as protocol one. - /// Service returned a non-success status code. - public virtual async Task StillConvenientAsync() + /// Service returned a non-success status code. + public virtual async Task StillConvenientAsync() { return await StillConvenientAsync(null).ConfigureAwait(false); } @@ -1109,16 +1111,16 @@ public virtual async Task StillConvenientAsync() /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult HeadAsBoolean(string id, RequestOptions options) + public virtual Response HeadAsBoolean(string id, RequestContext context) { Argument.AssertNotNull(id, nameof(id)); - using PipelineMessage message = CreateHeadAsBooleanRequest(id, options); - return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + using HttpMessage message = CreateHeadAsBooleanRequest(id, context); + return Pipeline.ProcessMessage(message, context); } /// @@ -1130,23 +1132,23 @@ public virtual ClientResult HeadAsBoolean(string id, RequestOptions options) /// /// /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. - /// Service returned a non-success status code. + /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task HeadAsBooleanAsync(string id, RequestOptions options) + public virtual async Task HeadAsBooleanAsync(string id, RequestContext context) { Argument.AssertNotNull(id, nameof(id)); - using PipelineMessage message = CreateHeadAsBooleanRequest(id, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using HttpMessage message = CreateHeadAsBooleanRequest(id, context); + return await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); } /// head as boolean. /// /// is null. - /// Service returned a non-success status code. - public virtual ClientResult HeadAsBoolean(string id) + /// Service returned a non-success status code. + public virtual Response HeadAsBoolean(string id) { Argument.AssertNotNull(id, nameof(id)); @@ -1156,8 +1158,8 @@ public virtual ClientResult HeadAsBoolean(string id) /// head as boolean. /// /// is null. - /// Service returned a non-success status code. - public virtual async Task HeadAsBooleanAsync(string id) + /// Service returned a non-success status code. + public virtual async Task HeadAsBooleanAsync(string id) { Argument.AssertNotNull(id, nameof(id)); diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClientOptions.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClientOptions.cs index 902ba6acf982..ce57ff03d1bc 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClientOptions.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/BasicTypeSpecClientOptions.cs @@ -6,12 +6,12 @@ #nullable disable using System; -using System.ClientModel.Primitives; +using Azure.Core; namespace BasicTypeSpec { /// Client options for . - public partial class BasicTypeSpecClientOptions : ClientPipelineOptions + public partial class BasicTypeSpecClientOptions : ClientOptions { private const ServiceVersion LatestVersion = ServiceVersion.V2024_08_16_Preview; diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientPipelineExtensions.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientPipelineExtensions.cs index d9378b66796e..82e2f9dcaead 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientPipelineExtensions.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ClientPipelineExtensions.cs @@ -5,66 +5,73 @@ #nullable disable -using System.ClientModel; -using System.ClientModel.Primitives; using System.Threading.Tasks; +using Azure; +using Azure.Core; +using Azure.Core.Pipeline; namespace BasicTypeSpec { internal static partial class ClientPipelineExtensions { - public static async ValueTask ProcessMessageAsync(this ClientPipeline pipeline, PipelineMessage message, RequestOptions options) + public static async ValueTask ProcessMessageAsync(this HttpPipeline pipeline, HttpMessage message, RequestContext options) { - await pipeline.SendAsync(message).ConfigureAwait(false); + await pipeline.SendAsync(message, default).ConfigureAwait(false); - if (message.Response.IsError && (options?.ErrorOptions & ClientErrorBehaviors.NoThrow) != ClientErrorBehaviors.NoThrow) + if (message.Response.IsError && (options?.ErrorOptions & ErrorOptions.NoThrow) != ErrorOptions.NoThrow) { - throw await ClientResultException.CreateAsync(message.Response).ConfigureAwait(false); + throw new RequestFailedException(message.Response); } - PipelineResponse response = message.BufferResponse ? message.Response : message.ExtractResponse(); + Response response = message.BufferResponse ? message.Response : ExtractResponseContent(message); return response; } - public static PipelineResponse ProcessMessage(this ClientPipeline pipeline, PipelineMessage message, RequestOptions options) + public static Response ProcessMessage(this HttpPipeline pipeline, HttpMessage message, RequestContext options) { - pipeline.Send(message); + pipeline.Send(message, default); - if (message.Response.IsError && (options?.ErrorOptions & ClientErrorBehaviors.NoThrow) != ClientErrorBehaviors.NoThrow) + if (message.Response.IsError && (options?.ErrorOptions & ErrorOptions.NoThrow) != ErrorOptions.NoThrow) { - throw new ClientResultException(message.Response); + throw new RequestFailedException(message.Response); } - PipelineResponse response = message.BufferResponse ? message.Response : message.ExtractResponse(); + Response response = message.BufferResponse ? message.Response : ExtractResponseContent(message); return response; } - public static async ValueTask> ProcessHeadAsBoolMessageAsync(this ClientPipeline pipeline, PipelineMessage message, RequestOptions options) + public static async ValueTask> ProcessHeadAsBoolMessageAsync(this HttpPipeline pipeline, HttpMessage message, RequestContext options) { - PipelineResponse response = await pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + Response response = await pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); switch (response.Status) { case >= 200 and < 300: - return ClientResult.FromValue(true, response); + return Response.FromValue(true, response); case >= 400 and < 500: - return ClientResult.FromValue(false, response); + return Response.FromValue(false, response); default: - return new ErrorResult(response, new ClientResultException(response)); + return new ErrorResult(response, new RequestFailedException(response)); } } - public static ClientResult ProcessHeadAsBoolMessage(this ClientPipeline pipeline, PipelineMessage message, RequestOptions options) + public static Response ProcessHeadAsBoolMessage(this HttpPipeline pipeline, HttpMessage message, RequestContext options) { - PipelineResponse response = pipeline.ProcessMessage(message, options); + Response response = pipeline.ProcessMessage(message, options); switch (response.Status) { case >= 200 and < 300: - return ClientResult.FromValue(true, response); + return Response.FromValue(true, response); case >= 400 and < 500: - return ClientResult.FromValue(false, response); + return Response.FromValue(false, response); default: - return new ErrorResult(response, new ClientResultException(response)); + return new ErrorResult(response, new RequestFailedException(response)); } } + + private static Response ExtractResponseContent(HttpMessage message) + { + message.ExtractResponseContent(); + return message.Response; + } } } 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 index a887f440ebe9..86b06504d0c8 100644 --- 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 @@ -9,10 +9,11 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Azure.Core; namespace BasicTypeSpec { - internal partial class ClientUriBuilder + internal partial class ClientUriBuilder : RequestUriBuilder { private UriBuilder _uriBuilder; private StringBuilder _pathBuilder; @@ -28,84 +29,6 @@ public ClientUriBuilder() private StringBuilder QueryBuilder => _queryBuilder ??= new StringBuilder(UriBuilder.Query); - public void Reset(Uri uri) - { - _uriBuilder = new UriBuilder(uri); - _pathBuilder = new StringBuilder(UriBuilder.Path); - _queryBuilder = new StringBuilder(UriBuilder.Query); - } - - public void AppendPath(string value, bool escape) - { - if (escape) - { - value = Uri.EscapeDataString(value); - } - if (PathBuilder.Length > 0 && PathBuilder[PathBuilder.Length - 1] == '/' && value[0] == '/') - { - PathBuilder.Remove(PathBuilder.Length - 1, 1); - } - PathBuilder.Append(value); - UriBuilder.Path = PathBuilder.ToString(); - } - - public void AppendPath(bool value, bool escape = false) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(float value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(double value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(int value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(byte[] value, string format, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value, format), escape); - - public void AppendPath(IEnumerable value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(DateTimeOffset value, string format, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value, format), escape); - - public void AppendPath(TimeSpan value, string format, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value, format), escape); - - public void AppendPath(Guid value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendPath(long value, bool escape = true) => AppendPath(TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, string value, bool escape) - { - if (QueryBuilder.Length > 0) - { - QueryBuilder.Append('&'); - } - if (escape) - { - value = Uri.EscapeDataString(value); - } - QueryBuilder.Append(name); - QueryBuilder.Append('='); - QueryBuilder.Append(value); - } - - public void AppendQuery(string name, bool value, bool escape = false) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, float value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, DateTimeOffset value, string format, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value, format), escape); - - public void AppendQuery(string name, TimeSpan value, string format, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value, format), escape); - - public void AppendQuery(string name, double value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, decimal value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, int value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, long value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, TimeSpan value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - - public void AppendQuery(string name, byte[] value, string format, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value, format), escape); - - public void AppendQuery(string name, Guid value, bool escape = true) => AppendQuery(name, TypeFormatters.ConvertToString(value), escape); - public void AppendQueryDelimited(string name, IEnumerable value, string delimiter, bool escape = true) { IEnumerable stringValues = value.Select(v => TypeFormatters.ConvertToString(v)); @@ -117,18 +40,5 @@ public void AppendQueryDelimited(string name, IEnumerable value, string de IEnumerable stringValues = value.Select(v => TypeFormatters.ConvertToString(v, format)); AppendQuery(name, string.Join(delimiter, stringValues), escape); } - - public Uri ToUri() - { - if (_pathBuilder != null) - { - UriBuilder.Path = _pathBuilder.ToString(); - } - if (_queryBuilder != null) - { - UriBuilder.Query = _queryBuilder.ToString(); - } - return UriBuilder.Uri; - } } } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ErrorResult.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ErrorResult.cs index 99d36a31e528..cc9535a76e79 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ErrorResult.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/ErrorResult.cs @@ -5,22 +5,26 @@ #nullable disable -using System.ClientModel; -using System.ClientModel.Primitives; +using Azure; namespace BasicTypeSpec { - internal partial class ErrorResult : ClientResult + internal partial class ErrorResult : Response { - private readonly PipelineResponse _response; - private readonly ClientResultException _exception; + private readonly Response _response; + private readonly RequestFailedException _exception; - public ErrorResult(PipelineResponse response, ClientResultException exception) : base(default, response) + public ErrorResult(Response response, RequestFailedException exception) { _response = response; _exception = exception; } public override T Value => throw _exception; + + public override Response GetRawResponse() + { + return _response; + } } } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/Utf8JsonBinaryContent.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/Utf8JsonBinaryContent.cs new file mode 100644 index 000000000000..d7d35c3dfb08 --- /dev/null +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Internal/Utf8JsonBinaryContent.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// + +#nullable disable + +using System.IO; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using Azure.Core; + +namespace BasicTypeSpec +{ + internal partial class Utf8JsonBinaryContent : RequestContent + { + private readonly MemoryStream _stream; + private readonly RequestContent _content; + + public Utf8JsonBinaryContent() + { + _stream = new MemoryStream(); + _content = Create(_stream); + JsonWriter = new Utf8JsonWriter(_stream); + } + + public Utf8JsonWriter JsonWriter { get; } + + public override async Task WriteToAsync(Stream stream, CancellationToken cancellationToken = default) + { + await JsonWriter.FlushAsync().ConfigureAwait(false); + await _content.WriteToAsync(stream, cancellationToken).ConfigureAwait(false); + } + + public override void WriteTo(Stream stream, CancellationToken cancellationToken = default) + { + JsonWriter.Flush(); + _content.WriteTo(stream, cancellationToken); + } + + public override bool TryComputeLength(out long length) + { + length = JsonWriter.BytesCommitted + JsonWriter.BytesPending; + return true; + } + + public override void Dispose() + { + JsonWriter.Dispose(); + _content.Dispose(); + _stream.Dispose(); + } + } +} diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.Serialization.cs index 7d1bd5d9d46a..f92833ee37f3 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -130,16 +131,18 @@ protected virtual Friend PersistableModelCreateCore(BinaryData data, ModelReader string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(Friend friend) + /// The to serialize into . + public static implicit operator RequestContent(Friend friend) { - return BinaryContent.Create(friend, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(friend, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator Friend(ClientResult result) + /// The to deserialize the from. + public static explicit operator Friend(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeFriend(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.cs index ea7b538f4377..f1419a822a26 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Friend.cs @@ -14,7 +14,7 @@ namespace BasicTypeSpec.Models public partial class Friend { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; internal Friend(string name) { @@ -28,6 +28,6 @@ internal Friend(string name, IDictionary additionalBinaryDat } /// name of the NotFriend. - public string Name { get; set; } + public string Name { get; } } } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs index a84cef90e170..baa17dbaa1cb 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -182,16 +183,18 @@ protected virtual ModelWithRequiredNullableProperties PersistableModelCreateCore string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(ModelWithRequiredNullableProperties modelWithRequiredNullableProperties) + /// The to serialize into . + public static implicit operator RequestContent(ModelWithRequiredNullableProperties modelWithRequiredNullableProperties) { - return BinaryContent.Create(modelWithRequiredNullableProperties, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(modelWithRequiredNullableProperties, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator ModelWithRequiredNullableProperties(ClientResult result) + /// The to deserialize the from. + public static explicit operator ModelWithRequiredNullableProperties(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeModelWithRequiredNullableProperties(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.cs index 3f743baad339..69afb469ca74 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.cs @@ -14,7 +14,7 @@ namespace BasicTypeSpec.Models public partial class ModelWithRequiredNullableProperties { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; /// Initializes a new instance of . /// required nullable primitive type. diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs index 519e2c3d1a94..75dc1aad68de 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -130,16 +131,18 @@ protected virtual ProjectedModel PersistableModelCreateCore(BinaryData data, Mod string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(ProjectedModel projectedModel) + /// The to serialize into . + public static implicit operator RequestContent(ProjectedModel projectedModel) { - return BinaryContent.Create(projectedModel, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(projectedModel, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator ProjectedModel(ClientResult result) + /// The to deserialize the from. + public static explicit operator ProjectedModel(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeProjectedModel(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.cs index d9a5e5895d01..850a0dab8aa8 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ProjectedModel.cs @@ -14,7 +14,7 @@ namespace BasicTypeSpec.Models public partial class ProjectedModel { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; internal ProjectedModel(string name) { @@ -28,6 +28,6 @@ internal ProjectedModel(string name, IDictionary additionalB } /// name of the ModelWithProjectedName. - public string Name { get; set; } + public string Name { get; } } } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs index 3bcdfe6ccf29..092802278552 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -118,16 +119,18 @@ protected virtual ReturnsAnonymousModelResponse PersistableModelCreateCore(Binar string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(ReturnsAnonymousModelResponse returnsAnonymousModelResponse) + /// The to serialize into . + public static implicit operator RequestContent(ReturnsAnonymousModelResponse returnsAnonymousModelResponse) { - return BinaryContent.Create(returnsAnonymousModelResponse, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(returnsAnonymousModelResponse, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator ReturnsAnonymousModelResponse(ClientResult result) + /// The to deserialize the from. + public static explicit operator ReturnsAnonymousModelResponse(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeReturnsAnonymousModelResponse(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.cs index 68974991df3d..54125976ebc3 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.cs @@ -14,7 +14,7 @@ namespace BasicTypeSpec.Models public partial class ReturnsAnonymousModelResponse { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; internal ReturnsAnonymousModelResponse() { diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs index fd1dea9632eb..62467f32c0fe 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -643,16 +644,18 @@ protected virtual RoundTripModel PersistableModelCreateCore(BinaryData data, Mod string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(RoundTripModel roundTripModel) + /// The to serialize into . + public static implicit operator RequestContent(RoundTripModel roundTripModel) { - return BinaryContent.Create(roundTripModel, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(roundTripModel, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator RoundTripModel(ClientResult result) + /// The to deserialize the from. + public static explicit operator RoundTripModel(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeRoundTripModel(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.cs index 771f0b16040e..3f660931d13c 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/RoundTripModel.cs @@ -17,7 +17,7 @@ namespace BasicTypeSpec.Models public partial class RoundTripModel { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; /// Initializes a new instance of . /// Required string, illustrating a reference type property. diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.Serialization.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.Serialization.cs index aed5b19c24d8..c473fa19a5fa 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.Serialization.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.Serialization.cs @@ -6,10 +6,11 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; +using Azure; +using Azure.Core; using BasicTypeSpec; namespace BasicTypeSpec.Models @@ -325,16 +326,18 @@ protected virtual Thing PersistableModelCreateCore(BinaryData data, ModelReaderW string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - /// The to serialize into . - public static implicit operator BinaryContent(Thing thing) + /// The to serialize into . + public static implicit operator RequestContent(Thing thing) { - return BinaryContent.Create(thing, ModelSerializationExtensions.WireOptions); + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteObjectValue(thing, ModelSerializationExtensions.WireOptions); + return content; } - /// The to deserialize the from. - public static explicit operator Thing(ClientResult result) + /// The to deserialize the from. + public static explicit operator Thing(Response result) { - using PipelineResponse response = result.GetRawResponse(); + using Response response = result; using JsonDocument document = JsonDocument.Parse(response.Content); return DeserializeThing(document.RootElement, ModelSerializationExtensions.WireOptions); } diff --git a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.cs b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.cs index c35fd826366e..62e0c73a58db 100644 --- a/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.cs +++ b/eng/packages/http-client-csharp/generator/TestProjects/Local/Basic-TypeSpec/src/Generated/Models/Thing.cs @@ -17,7 +17,7 @@ namespace BasicTypeSpec.Models public partial class Thing { /// Keeps track of any properties unknown to the library. - private protected IDictionary _additionalBinaryDataProperties; + private protected readonly IDictionary _additionalBinaryDataProperties; /// Initializes a new instance of . /// name of the Thing.