From b4a4cb31d735ccf4fcfcbb5c206393e557a93121 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Tue, 22 Oct 2024 11:17:54 +0800 Subject: [PATCH 01/12] Update ClientPipelineApi.CreateMessage abstraction --- .../src/Providers/Abstractions/ClientPipelineApi.cs | 5 ++--- .../src/Providers/ClientPipelineProvider.cs | 6 ++---- .../src/Providers/RestClientProvider.cs | 2 +- .../Providers/Abstractions/ClientPipelineApiTests.cs | 9 +++------ .../test/Providers/Abstractions/HttpMessageApiTests.cs | 1 - 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs index b32cd0976c3..d9bc7998fce 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs @@ -4,6 +4,7 @@ using System; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Providers; using Microsoft.Generator.CSharp.Snippets; namespace Microsoft.Generator.CSharp.ClientModel.Providers @@ -18,9 +19,7 @@ protected ClientPipelineApi(Type type, ValueExpression original) : base(type, or { } - public abstract HttpMessageApi CreateMessage(); - - public abstract ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier); + public abstract ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier); public abstract InvokeMethodExpression Send(HttpMessageApi message); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs index 404fb05181e..635e3834e6d 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs @@ -4,6 +4,7 @@ using System.ClientModel.Primitives; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Providers; using static Microsoft.Generator.CSharp.Snippets.Snippet; namespace Microsoft.Generator.CSharp.ClientModel.Providers @@ -26,12 +27,9 @@ public ClientPipelineProvider(ValueExpression original) : base(typeof(ClientPipe public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies) => Static().Invoke(nameof(ClientPipeline.Create), [options, New.Array(ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.PipelinePolicyType), perRetryPolicies, New.Array(ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.PipelinePolicyType)]).As(); - public override HttpMessageApi CreateMessage() + public override ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier) => new PipelineMessageProvider(Original.Invoke(nameof(ClientPipeline.CreateMessage))); - public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier) - => Original.Invoke(nameof(ClientPipeline.CreateMessage), requestOptions, responseClassifier).As(); - public override ClientPipelineApi FromExpression(ValueExpression expression) => new ClientPipelineProvider(expression); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index 8f67157fa85..989804b0909 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -161,7 +161,7 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) signature, new MethodBodyStatements( [ - Declare("message", pipelineField.CreateMessage().ToApi(), out HttpMessageApi message), + Declare("message", pipelineField.CreateMessage(options, classifier).ToApi(), out HttpMessageApi message), message.ResponseClassifier().Assign(classifier).Terminate(), Declare("request", message.Request().ToApi(), out HttpRequestApi request), // ScopedApi request.SetMethod(operation.HttpMethod).Terminate(), diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs index 2ea76f42bd5..62f6755dd94 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs @@ -2,6 +2,7 @@ using Microsoft.Generator.CSharp.ClientModel.Providers; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Providers; using Microsoft.Generator.CSharp.Tests.Common; using NUnit.Framework; @@ -28,7 +29,6 @@ public void ValidateBodyOfRestClientOperationIsOverridden() Assert.NotNull(method); Assert.NotNull(method!.BodyStatements); - var test = method?.BodyStatements?.ToDisplayString(); Assert.AreEqual(Helpers.GetExpectedFromFile(), method!.BodyStatements!.ToDisplayString()); } @@ -58,11 +58,8 @@ public TestClientPipelineApi(ValueExpression original) : base(typeof(string), or public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies) => Original.Invoke("GetFakeCreate", [options, perRetryPolicies]); - public override HttpMessageApi CreateMessage() - => Original.Invoke("GetFakeCreateMessage").ToApi(); - - public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier) - => Original.Invoke("GetFakeCreateMessage", [requestOptions, responseClassifier]); + public override ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier) + => Original.Invoke("GetFakeCreateMessage"); public override ClientPipelineApi FromExpression(ValueExpression expression) => new TestClientPipelineApi(expression); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs index f9ceabb91e6..f7eff1fa620 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs @@ -32,7 +32,6 @@ public void ValidateBodyOfProcessMessageIsOverridden() Assert.IsNotNull(method); Assert.IsNotNull(method!.BodyStatements); - var test = method!.BodyStatements!.ToDisplayString(); Assert.AreEqual(Helpers.GetExpectedFromFile(), method!.BodyStatements!.ToDisplayString()); } From 13111fb436b1aced80a56d924f341969fc57c3c7 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 23 Oct 2024 16:59:18 +0800 Subject: [PATCH 02/12] update test --- .../test/Providers/Abstractions/ClientPipelineApiTests.cs | 3 ++- .../ValidateBodyOfRestClientOperationIsOverridden.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs index 62f6755dd94..75b89191637 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs @@ -29,6 +29,7 @@ public void ValidateBodyOfRestClientOperationIsOverridden() Assert.NotNull(method); Assert.NotNull(method!.BodyStatements); + var test = method!.BodyStatements!.ToDisplayString(); Assert.AreEqual(Helpers.GetExpectedFromFile(), method!.BodyStatements!.ToDisplayString()); } @@ -59,7 +60,7 @@ public override ValueExpression Create(ValueExpression options, ValueExpression => Original.Invoke("GetFakeCreate", [options, perRetryPolicies]); public override ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier) - => Original.Invoke("GetFakeCreateMessage"); + => Original.Invoke("GetFakeCreateMessage", [requestOptions, responseClassifier]); public override ClientPipelineApi FromExpression(ValueExpression expression) => new TestClientPipelineApi(expression); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/TestData/ClientPipelineApiTests/ValidateBodyOfRestClientOperationIsOverridden.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/TestData/ClientPipelineApiTests/ValidateBodyOfRestClientOperationIsOverridden.cs index 82fcb29c6c3..b835fb8067c 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/TestData/ClientPipelineApiTests/ValidateBodyOfRestClientOperationIsOverridden.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/TestData/ClientPipelineApiTests/ValidateBodyOfRestClientOperationIsOverridden.cs @@ -1,4 +1,4 @@ -global::System.ClientModel.Primitives.PipelineMessage message = Pipeline.GetFakeCreateMessage(); +global::System.ClientModel.Primitives.PipelineMessage message = Pipeline.GetFakeCreateMessage(options, PipelineMessageClassifier200); message.ResponseClassifier = PipelineMessageClassifier200; global::System.ClientModel.Primitives.PipelineRequest request = message.Request; request.Method = "GET"; From 72423941685e05bdcd794b1a8e0b2e86d46427a5 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Fri, 25 Oct 2024 15:27:58 +0800 Subject: [PATCH 03/12] add HttpRequestOptionsApi to ClientPipelineApi.Send(Async) --- .../src/Providers/Abstractions/ClientPipelineApi.cs | 4 ++-- .../src/Providers/ClientPipelineExtensionsDefinition.cs | 6 +++--- .../src/Providers/ClientPipelineProvider.cs | 8 ++++---- .../test/Providers/Abstractions/ClientPipelineApiTests.cs | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs index d9bc7998fce..3e1972cb41a 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs @@ -21,9 +21,9 @@ protected ClientPipelineApi(Type type, ValueExpression original) : base(type, or public abstract ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier); - public abstract InvokeMethodExpression Send(HttpMessageApi message); + public abstract InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options); - public abstract InvokeMethodExpression SendAsync(HttpMessageApi message); + public abstract InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options); public abstract ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs index 0ecac00ae21..7de4c4e2b18 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs @@ -27,7 +27,7 @@ public ClientPipelineExtensionsDefinition() { _pipelineParam = new ParameterProvider("pipeline", FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.ClientPipelineType); _messageParam = new ParameterProvider("message", FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.HttpMessageApi.HttpMessageType); - _requestOptionsParam = new ParameterProvider("options", FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.HttpRequestOptionsType); + _requestOptionsParam = new ParameterProvider(ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.ParameterName, FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.HttpRequestOptionsType); _pipeline = _pipelineParam.AsExpression.ToApi(); _message = _messageParam.AsExpression.ToApi(); _options = _requestOptionsParam.AsExpression.ToApi(); @@ -124,7 +124,7 @@ private MethodProvider BuildProcessMessage() var clientErrorNoThrow = _options.NoThrow(); return new MethodProvider(signature, new MethodBodyStatement[] { - _pipeline.Send(_message).Terminate(), + _pipeline.Send(_message, _options).Terminate(), MethodBodyStatement.EmptyLine, new IfStatement(_message.Response().IsError().And(new BinaryOperatorExpression("&", _options.NullConditional().Property("ErrorOptions"), clientErrorNoThrow).NotEqual(clientErrorNoThrow))) { @@ -167,7 +167,7 @@ private MethodProvider BuildProcessMessageAsync() var clientErrorNoThrow = _options.NoThrow(); return new MethodProvider(signature, new MethodBodyStatement[] { - _pipeline.SendAsync(_message).Terminate(), + _pipeline.SendAsync(_message, _options).Terminate(), MethodBodyStatement.EmptyLine, new IfStatement(_message.Response().IsError().And(new BinaryOperatorExpression("&", _options.NullConditional().Property("ErrorOptions"), clientErrorNoThrow).NotEqual(clientErrorNoThrow))) { diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs index 635e3834e6d..45f36d87fee 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs @@ -36,11 +36,11 @@ public override ClientPipelineApi FromExpression(ValueExpression expression) public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments) => Static().Invoke(nameof(ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy), arguments).As(); - public override InvokeMethodExpression Send(HttpMessageApi message) - => Original.Invoke(nameof(ClientPipeline.Send), [message]); + public override InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke(nameof(ClientPipeline.Send), [message, options]); - public override InvokeMethodExpression SendAsync(HttpMessageApi message) - => Original.Invoke(nameof(ClientPipeline.SendAsync), [message], true); + public override InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke(nameof(ClientPipeline.SendAsync), [message, options], true); public override ClientPipelineApi ToExpression() => this; } diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs index 75b89191637..186b1c2619e 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs @@ -68,11 +68,11 @@ public override ClientPipelineApi FromExpression(ValueExpression expression) public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments) => Original.Invoke("GetFakePerRetryPolicy", arguments); - public override InvokeMethodExpression Send(HttpMessageApi message) - => Original.Invoke("GetFakeSend", message); + public override InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke("GetFakeSend", [message, options]); - public override InvokeMethodExpression SendAsync(HttpMessageApi message) - => Original.Invoke("GetFakeSendAsync", message); + public override InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke("GetFakeSendAsync", [message, options]); public override ClientPipelineApi ToExpression() => this; } From 8503e2ef05b9c51b29c987f25b532af9f83a371d Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Fri, 25 Oct 2024 16:12:24 +0800 Subject: [PATCH 04/12] fix --- .../src/Providers/ClientPipelineProvider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs index 45f36d87fee..34deba8074b 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs @@ -37,10 +37,10 @@ public override ValueExpression PerRetryPolicy(params ValueExpression[] argument => Static().Invoke(nameof(ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy), arguments).As(); public override InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke(nameof(ClientPipeline.Send), [message, options]); + => Original.Invoke(nameof(ClientPipeline.Send), [message]); public override InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke(nameof(ClientPipeline.SendAsync), [message, options], true); + => Original.Invoke(nameof(ClientPipeline.SendAsync), [message], true); public override ClientPipelineApi ToExpression() => this; } From 64efee621c002c7fe9f9a7285005d6cd353ccf07 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Mon, 28 Oct 2024 10:18:18 +0800 Subject: [PATCH 05/12] resolve comments and update HttpMessageApi --- .../src/Providers/Abstractions/ClientPipelineApi.cs | 2 +- .../src/Providers/Abstractions/HttpMessageApi.cs | 2 +- .../src/Providers/ClientPipelineProvider.cs | 2 +- .../src/Providers/PipelineMessageProvider.cs | 5 +++-- .../src/Providers/RestClientProvider.cs | 6 +++--- .../test/Providers/Abstractions/ClientPipelineApiTests.cs | 4 +--- .../test/Providers/Abstractions/HttpMessageApiTests.cs | 4 ++-- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs index 3e1972cb41a..69d7c310c3d 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs @@ -19,7 +19,7 @@ protected ClientPipelineApi(Type type, ValueExpression original) : base(type, or { } - public abstract ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier); + public abstract ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier); public abstract InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs index a955d07367e..a9a42540ecc 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs @@ -21,7 +21,7 @@ protected HttpMessageApi(Type type, ValueExpression original) : base(type, origi public abstract ValueExpression BufferResponse(); - public abstract ValueExpression ResponseClassifier(); + public abstract MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier); public abstract MethodBodyStatement Apply(ValueExpression options); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs index 34deba8074b..5fe1930bb29 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs @@ -27,7 +27,7 @@ public ClientPipelineProvider(ValueExpression original) : base(typeof(ClientPipe public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies) => Static().Invoke(nameof(ClientPipeline.Create), [options, New.Array(ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.PipelinePolicyType), perRetryPolicies, New.Array(ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.PipelinePolicyType)]).As(); - public override ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier) + public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier) => new PipelineMessageProvider(Original.Invoke(nameof(ClientPipeline.CreateMessage))); public override ClientPipelineApi FromExpression(ValueExpression expression) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs index 25467d7cf1f..84f04261548 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.ClientModel.Primitives; +using Microsoft.CodeAnalysis.Classification; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; using Microsoft.Generator.CSharp.Statements; @@ -27,8 +28,8 @@ public override ValueExpression BufferResponse() public override HttpResponseApi Response() => new PipelineResponseProvider(Original.Property(nameof(PipelineMessage.Response))); - public override ValueExpression ResponseClassifier() - => Original.Property(nameof(PipelineMessage.ResponseClassifier)); + public override MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier) + => Original.Property(nameof(PipelineMessage.ResponseClassifier)).Assign(statusCodeClassifier).Terminate(); public override MethodBodyStatement Apply(ValueExpression options) => Original.Invoke(nameof(PipelineMessage.Apply), options).Terminate(); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index 1ec7710fa7a..57749d63cba 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -165,9 +165,9 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) signature, new MethodBodyStatements( [ - Declare("message", pipelineField.CreateMessage(options, classifier).ToApi(), out HttpMessageApi message), - message.ResponseClassifier().Assign(classifier).Terminate(), - Declare("request", message.Request().ToApi(), out HttpRequestApi request), // ScopedApi + Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), + message.Assign(classifier.AsVariableExpression.ToApi()), + Declare("request", message.Request().ToApi(), out HttpRequestApi request), request.SetMethod(operation.HttpMethod).Terminate(), Declare("uri", New.Instance(), out ScopedApi uri), uri.Reset(ClientProvider.EndpointField).Terminate(), diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs index 186b1c2619e..be6d9d0e9d7 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs @@ -2,7 +2,6 @@ using Microsoft.Generator.CSharp.ClientModel.Providers; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; -using Microsoft.Generator.CSharp.Providers; using Microsoft.Generator.CSharp.Tests.Common; using NUnit.Framework; @@ -29,7 +28,6 @@ public void ValidateBodyOfRestClientOperationIsOverridden() Assert.NotNull(method); Assert.NotNull(method!.BodyStatements); - var test = method!.BodyStatements!.ToDisplayString(); Assert.AreEqual(Helpers.GetExpectedFromFile(), method!.BodyStatements!.ToDisplayString()); } @@ -59,7 +57,7 @@ public TestClientPipelineApi(ValueExpression original) : base(typeof(string), or public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies) => Original.Invoke("GetFakeCreate", [options, perRetryPolicies]); - public override ValueExpression CreateMessage(ParameterProvider requestOptions, ValueExpression responseClassifier) + public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier) => Original.Invoke("GetFakeCreateMessage", [requestOptions, responseClassifier]); public override ClientPipelineApi FromExpression(ValueExpression expression) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs index f7eff1fa620..b89b6d2bd63 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs @@ -72,8 +72,8 @@ public override HttpRequestApi Request() public override HttpResponseApi Response() => Original.Invoke("GetFakeResponse").ToApi(); - public override ValueExpression ResponseClassifier() - => Original.Invoke("GetFakeResponseClassifier"); + public override MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier) + => Original.Invoke("GetFakeResponseClassifier", [statusCodeClassifier]).Terminate(); public override HttpMessageApi ToExpression() => this; } From 68b34dcfe3e134f6a10c6fbca901f58c7102f4b6 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Mon, 28 Oct 2024 11:06:00 +0800 Subject: [PATCH 06/12] fix --- .../src/Providers/RestClientProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index 57749d63cba..e5582bdf198 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -166,7 +166,7 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) new MethodBodyStatements( [ Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), - message.Assign(classifier.AsVariableExpression.ToApi()), + message.Assign(((MemberExpression)classifier).ToApi()), Declare("request", message.Request().ToApi(), out HttpRequestApi request), request.SetMethod(operation.HttpMethod).Terminate(), Declare("uri", New.Instance(), out ScopedApi uri), From 0637396ab386e500f0db8f9445b82e555844823a Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Tue, 29 Oct 2024 09:00:29 +0800 Subject: [PATCH 07/12] rename --- .../src/Providers/Abstractions/HttpMessageApi.cs | 2 +- .../src/Providers/PipelineMessageProvider.cs | 2 +- .../src/Providers/RestClientProvider.cs | 2 +- .../test/Providers/Abstractions/HttpMessageApiTests.cs | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs index a9a42540ecc..ddea7f47d2b 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs @@ -21,7 +21,7 @@ protected HttpMessageApi(Type type, ValueExpression original) : base(type, origi public abstract ValueExpression BufferResponse(); - public abstract MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier); + public abstract MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier); public abstract MethodBodyStatement Apply(ValueExpression options); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs index 84f04261548..a3178d66d51 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs @@ -28,7 +28,7 @@ public override ValueExpression BufferResponse() public override HttpResponseApi Response() => new PipelineResponseProvider(Original.Property(nameof(PipelineMessage.Response))); - public override MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier) + public override MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) => Original.Property(nameof(PipelineMessage.ResponseClassifier)).Assign(statusCodeClassifier).Terminate(); public override MethodBodyStatement Apply(ValueExpression options) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index e5582bdf198..4f0808dfbd2 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -166,7 +166,7 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) new MethodBodyStatements( [ Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), - message.Assign(((MemberExpression)classifier).ToApi()), + message.AssignResponseClassifier(((MemberExpression)classifier).ToApi()), Declare("request", message.Request().ToApi(), out HttpRequestApi request), request.SetMethod(operation.HttpMethod).Terminate(), Declare("uri", New.Instance(), out ScopedApi uri), diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs index b89b6d2bd63..f006dc80b4b 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs @@ -72,8 +72,8 @@ public override HttpRequestApi Request() public override HttpResponseApi Response() => Original.Invoke("GetFakeResponse").ToApi(); - public override MethodBodyStatement Assign(StatusCodeClassifierApi statusCodeClassifier) - => Original.Invoke("GetFakeResponseClassifier", [statusCodeClassifier]).Terminate(); + public override MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) + => Original.Invoke("GetFakeAssignResponseClassifier", [statusCodeClassifier]).Terminate(); public override HttpMessageApi ToExpression() => this; } From fad2301905f78bbdb593326b37c5b7533edc03d8 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Tue, 29 Oct 2024 09:19:18 +0800 Subject: [PATCH 08/12] rename and set input type more accurate --- .../src/Providers/Abstractions/HttpMessageApi.cs | 2 +- .../src/Providers/PipelineMessageProvider.cs | 2 +- .../src/Providers/RestClientProvider.cs | 2 +- .../test/Providers/Abstractions/HttpMessageApiTests.cs | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs index ddea7f47d2b..68524f83bd9 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs @@ -23,7 +23,7 @@ protected HttpMessageApi(Type type, ValueExpression original) : base(type, origi public abstract MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier); - public abstract MethodBodyStatement Apply(ValueExpression options); + public abstract MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options); public abstract MethodBodyStatement[] ExtractResponse(); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs index a3178d66d51..bee0115eb22 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs @@ -31,7 +31,7 @@ public override HttpResponseApi Response() public override MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) => Original.Property(nameof(PipelineMessage.ResponseClassifier)).Assign(statusCodeClassifier).Terminate(); - public override MethodBodyStatement Apply(ValueExpression options) + public override MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options) => Original.Invoke(nameof(PipelineMessage.Apply), options).Terminate(); public override MethodBodyStatement[] ExtractResponse() diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index 4f0808dfbd2..c6eda7dc9b3 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -176,7 +176,7 @@ .. AppendQueryParameters(uri, operation, paramMap), request.SetUri(uri).Terminate(), .. AppendHeaderParameters(request, operation, paramMap), .. GetSetContent(request, signature.Parameters), - message.Apply(options), + message.SetRequestContext(options.AsExpression.ToApi()), Return(message) ]), this); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs index f006dc80b4b..dbceb84e48a 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs @@ -54,8 +54,8 @@ public TestHttpMessageApi(ValueExpression original) : base(typeof(string), origi public override CSharpType HttpMessageType => typeof(string); - public override MethodBodyStatement Apply(ValueExpression options) - => Original.Invoke("GetFakeApply", [options]).Terminate(); + public override MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options) + => Original.Invoke("GetFakeSetRequestContext", [options]).Terminate(); public override ValueExpression BufferResponse() => Original.Invoke("GetFakeBufferResponse"); From 48dbaf98633b14a42c108382ed689065e7ccb139 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Tue, 29 Oct 2024 09:27:59 +0800 Subject: [PATCH 09/12] rename --- .../src/Providers/Abstractions/HttpMessageApi.cs | 4 ++-- .../src/Providers/PipelineMessageProvider.cs | 4 ++-- .../src/Providers/RestClientProvider.cs | 4 ++-- .../test/Providers/Abstractions/HttpMessageApiTests.cs | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs index 68524f83bd9..1ae33e935d3 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpMessageApi.cs @@ -21,9 +21,9 @@ protected HttpMessageApi(Type type, ValueExpression original) : base(type, origi public abstract ValueExpression BufferResponse(); - public abstract MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier); + public abstract MethodBodyStatement ApplyResponseClassifier(StatusCodeClassifierApi statusCodeClassifier); - public abstract MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options); + public abstract MethodBodyStatement ApplyRequestOptions(HttpRequestOptionsApi options); public abstract MethodBodyStatement[] ExtractResponse(); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs index bee0115eb22..255acaebc42 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineMessageProvider.cs @@ -28,10 +28,10 @@ public override ValueExpression BufferResponse() public override HttpResponseApi Response() => new PipelineResponseProvider(Original.Property(nameof(PipelineMessage.Response))); - public override MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) + public override MethodBodyStatement ApplyResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) => Original.Property(nameof(PipelineMessage.ResponseClassifier)).Assign(statusCodeClassifier).Terminate(); - public override MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options) + public override MethodBodyStatement ApplyRequestOptions(HttpRequestOptionsApi options) => Original.Invoke(nameof(PipelineMessage.Apply), options).Terminate(); public override MethodBodyStatement[] ExtractResponse() diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index c6eda7dc9b3..10b9694348d 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -166,7 +166,7 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) new MethodBodyStatements( [ Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), - message.AssignResponseClassifier(((MemberExpression)classifier).ToApi()), + message.ApplyResponseClassifier(((MemberExpression)classifier).ToApi()), Declare("request", message.Request().ToApi(), out HttpRequestApi request), request.SetMethod(operation.HttpMethod).Terminate(), Declare("uri", New.Instance(), out ScopedApi uri), @@ -176,7 +176,7 @@ .. AppendQueryParameters(uri, operation, paramMap), request.SetUri(uri).Terminate(), .. AppendHeaderParameters(request, operation, paramMap), .. GetSetContent(request, signature.Parameters), - message.SetRequestContext(options.AsExpression.ToApi()), + message.ApplyRequestOptions(options.AsExpression.ToApi()), Return(message) ]), this); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs index dbceb84e48a..2bd282029a3 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/HttpMessageApiTests.cs @@ -54,7 +54,7 @@ public TestHttpMessageApi(ValueExpression original) : base(typeof(string), origi public override CSharpType HttpMessageType => typeof(string); - public override MethodBodyStatement SetRequestContext(HttpRequestOptionsApi options) + public override MethodBodyStatement ApplyRequestOptions(HttpRequestOptionsApi options) => Original.Invoke("GetFakeSetRequestContext", [options]).Terminate(); public override ValueExpression BufferResponse() @@ -72,7 +72,7 @@ public override HttpRequestApi Request() public override HttpResponseApi Response() => Original.Invoke("GetFakeResponse").ToApi(); - public override MethodBodyStatement AssignResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) + public override MethodBodyStatement ApplyResponseClassifier(StatusCodeClassifierApi statusCodeClassifier) => Original.Invoke("GetFakeAssignResponseClassifier", [statusCodeClassifier]).Terminate(); public override HttpMessageApi ToExpression() => this; From 610c92012dbae105f2c66c928f72939b2d7737dd Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Tue, 29 Oct 2024 09:41:26 +0800 Subject: [PATCH 10/12] make abstraction more generic --- .../src/Providers/Abstractions/ClientPipelineApi.cs | 5 +++-- .../src/Providers/Abstractions/HttpRequestApi.cs | 7 ++++--- .../Providers/ClientPipelineExtensionsDefinition.cs | 4 ++-- .../src/Providers/ClientPipelineProvider.cs | 10 +++++----- .../src/Providers/PipelineRequestProvider.cs | 13 +++++++------ .../src/Providers/RestClientProvider.cs | 6 +++--- .../Abstractions/ClientPipelineApiTests.cs | 9 +++++---- 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs index 69d7c310c3d..9c18555bf2d 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ClientPipelineApi.cs @@ -6,6 +6,7 @@ using Microsoft.Generator.CSharp.Primitives; using Microsoft.Generator.CSharp.Providers; using Microsoft.Generator.CSharp.Snippets; +using Microsoft.Generator.CSharp.Statements; namespace Microsoft.Generator.CSharp.ClientModel.Providers { @@ -21,9 +22,9 @@ protected ClientPipelineApi(Type type, ValueExpression original) : base(type, or public abstract ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier); - public abstract InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options); + public abstract MethodBodyStatement Send(HttpMessageApi message, HttpRequestOptionsApi options); - public abstract InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options); + public abstract MethodBodyStatement SendAsync(HttpMessageApi message, HttpRequestOptionsApi options); public abstract ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpRequestApi.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpRequestApi.cs index 910355647ae..5428986201f 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpRequestApi.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/HttpRequestApi.cs @@ -6,6 +6,7 @@ using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; using Microsoft.Generator.CSharp.Snippets; +using Microsoft.Generator.CSharp.Statements; namespace Microsoft.Generator.CSharp.ClientModel.Providers { @@ -15,11 +16,11 @@ protected HttpRequestApi(CSharpType type, ValueExpression original) : base(type, { } - public abstract AssignmentExpression SetMethod(string httpMethod); + public abstract MethodBodyStatement SetMethod(string httpMethod); - public abstract AssignmentExpression SetUri(ValueExpression uri); + public abstract MethodBodyStatement SetUri(ValueExpression uri); - public abstract InvokeMethodExpression SetHeaders(IReadOnlyList arguments); + public abstract MethodBodyStatement SetHeaders(IReadOnlyList arguments); public abstract ValueExpression Content(); public abstract HttpRequestApi FromExpression(ValueExpression original); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs index 7de4c4e2b18..2d677bb6690 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs @@ -124,7 +124,7 @@ private MethodProvider BuildProcessMessage() var clientErrorNoThrow = _options.NoThrow(); return new MethodProvider(signature, new MethodBodyStatement[] { - _pipeline.Send(_message, _options).Terminate(), + _pipeline.Send(_message, _options), MethodBodyStatement.EmptyLine, new IfStatement(_message.Response().IsError().And(new BinaryOperatorExpression("&", _options.NullConditional().Property("ErrorOptions"), clientErrorNoThrow).NotEqual(clientErrorNoThrow))) { @@ -167,7 +167,7 @@ private MethodProvider BuildProcessMessageAsync() var clientErrorNoThrow = _options.NoThrow(); return new MethodProvider(signature, new MethodBodyStatement[] { - _pipeline.SendAsync(_message, _options).Terminate(), + _pipeline.SendAsync(_message, _options), MethodBodyStatement.EmptyLine, new IfStatement(_message.Response().IsError().And(new BinaryOperatorExpression("&", _options.NullConditional().Property("ErrorOptions"), clientErrorNoThrow).NotEqual(clientErrorNoThrow))) { diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs index 5fe1930bb29..22c03078082 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineProvider.cs @@ -4,7 +4,7 @@ using System.ClientModel.Primitives; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; -using Microsoft.Generator.CSharp.Providers; +using Microsoft.Generator.CSharp.Statements; using static Microsoft.Generator.CSharp.Snippets.Snippet; namespace Microsoft.Generator.CSharp.ClientModel.Providers @@ -36,11 +36,11 @@ public override ClientPipelineApi FromExpression(ValueExpression expression) public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments) => Static().Invoke(nameof(ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy), arguments).As(); - public override InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke(nameof(ClientPipeline.Send), [message]); + public override MethodBodyStatement Send(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke(nameof(ClientPipeline.Send), [message]).Terminate(); - public override InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke(nameof(ClientPipeline.SendAsync), [message], true); + public override MethodBodyStatement SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke(nameof(ClientPipeline.SendAsync), [message], true).Terminate(); public override ClientPipelineApi ToExpression() => this; } diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineRequestProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineRequestProvider.cs index 202d1966559..a8d36d45bed 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineRequestProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/PipelineRequestProvider.cs @@ -6,6 +6,7 @@ using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.ClientModel.Snippets; using static Microsoft.Generator.CSharp.Snippets.Snippet; +using Microsoft.Generator.CSharp.Statements; namespace Microsoft.Generator.CSharp.ClientModel.Providers { @@ -24,14 +25,14 @@ public override ValueExpression Content() public override HttpRequestApi FromExpression(ValueExpression original) => new PipelineRequestProvider(original); - public override InvokeMethodExpression SetHeaders(IReadOnlyList arguments) - => Original.Property(nameof(PipelineRequest.Headers)).Invoke(nameof(PipelineRequestHeaders.Set), arguments); + public override MethodBodyStatement SetHeaders(IReadOnlyList arguments) + => Original.Property(nameof(PipelineRequest.Headers)).Invoke(nameof(PipelineRequestHeaders.Set), arguments).Terminate(); - public override AssignmentExpression SetMethod(string httpMethod) - => Original.Property(nameof(PipelineRequest.Method)).Assign(Literal(httpMethod)); + public override MethodBodyStatement SetMethod(string httpMethod) + => Original.Property(nameof(PipelineRequest.Method)).Assign(Literal(httpMethod)).Terminate(); - public override AssignmentExpression SetUri(ValueExpression value) - => Original.Property("Uri").Assign(value.As().ToUri()); + public override MethodBodyStatement SetUri(ValueExpression value) + => Original.Property("Uri").Assign(value.As().ToUri()).Terminate(); public override HttpRequestApi ToExpression() => this; } diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index 10b9694348d..f0e9b065db7 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -168,12 +168,12 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), message.ApplyResponseClassifier(((MemberExpression)classifier).ToApi()), Declare("request", message.Request().ToApi(), out HttpRequestApi request), - request.SetMethod(operation.HttpMethod).Terminate(), + request.SetMethod(operation.HttpMethod), Declare("uri", New.Instance(), out ScopedApi uri), uri.Reset(ClientProvider.EndpointField).Terminate(), .. AppendPathParameters(uri, operation, paramMap), .. AppendQueryParameters(uri, operation, paramMap), - request.SetUri(uri).Terminate(), + request.SetUri(uri), .. AppendHeaderParameters(request, operation, paramMap), .. GetSetContent(request, signature.Parameters), message.ApplyRequestOptions(options.AsExpression.ToApi()), @@ -231,7 +231,7 @@ private IEnumerable AppendHeaderParameters(HttpRequestApi r } else { - statement = request.SetHeaders([Literal(inputParameter.NameInRequest), toStringExpression.As()]).Terminate(); + statement = request.SetHeaders([Literal(inputParameter.NameInRequest), toStringExpression.As()]); } statements.Add(statement); } diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs index be6d9d0e9d7..fb5c2538b42 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/Abstractions/ClientPipelineApiTests.cs @@ -2,6 +2,7 @@ using Microsoft.Generator.CSharp.ClientModel.Providers; using Microsoft.Generator.CSharp.Expressions; using Microsoft.Generator.CSharp.Primitives; +using Microsoft.Generator.CSharp.Statements; using Microsoft.Generator.CSharp.Tests.Common; using NUnit.Framework; @@ -66,11 +67,11 @@ public override ClientPipelineApi FromExpression(ValueExpression expression) public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments) => Original.Invoke("GetFakePerRetryPolicy", arguments); - public override InvokeMethodExpression Send(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke("GetFakeSend", [message, options]); + public override MethodBodyStatement Send(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke("GetFakeSend", [message, options]).Terminate(); - public override InvokeMethodExpression SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) - => Original.Invoke("GetFakeSendAsync", [message, options]); + public override MethodBodyStatement SendAsync(HttpMessageApi message, HttpRequestOptionsApi options) + => Original.Invoke("GetFakeSendAsync", [message, options]).Terminate(); public override ClientPipelineApi ToExpression() => this; } From 5b7b61c49a137fc90566d72074c80089c3cf8402 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 30 Oct 2024 10:19:46 +0800 Subject: [PATCH 11/12] Add overload methods for ToApi so that we can remove explicit cast and AsExpression --- .../Abstractions/ValueExpressionExtensions.cs | 51 +++++++++++++++++++ .../ClientPipelineExtensionsDefinition.cs | 6 +-- .../src/Providers/RestClientProvider.cs | 8 +-- .../src/Snippets/Snippet.cs | 10 ++-- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ValueExpressionExtensions.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ValueExpressionExtensions.cs index 044708c6b8a..e4bc7219a85 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ValueExpressionExtensions.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/Abstractions/ValueExpressionExtensions.cs @@ -3,6 +3,7 @@ using System; using Microsoft.Generator.CSharp.Expressions; +using Microsoft.Generator.CSharp.Providers; using Microsoft.Generator.CSharp.Snippets; namespace Microsoft.Generator.CSharp.ClientModel.Providers @@ -33,5 +34,55 @@ public static T ToApi(this ValueExpression valueExpression) where T : ScopedA throw new InvalidOperationException($"Invalid type {typeof(T)}"); } } + + public static T ToApi(this ParameterProvider valueExpression) where T : ScopedApi + { + switch (typeof(T).Name) + { + case nameof(ClientResponseApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.ClientResponseApi.FromExpression(valueExpression); + case nameof(HttpResponseApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpResponseApi.FromExpression(valueExpression); + case nameof(HttpRequestOptionsApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.FromExpression(valueExpression); + case nameof(HttpMessageApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpMessageApi.FromExpression(valueExpression); + case nameof(HttpRequestApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpRequestApi.FromExpression(valueExpression); + case nameof(ClientPipelineApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.FromExpression(valueExpression); + case nameof(StatusCodeClassifierApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.StatusCodeClassifierApi.FromExpression(valueExpression); + case nameof(RequestContentApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.RequestContentApi.FromExpression(valueExpression); + default: + throw new InvalidOperationException($"Invalid type {typeof(T)}"); + } + } + + public static T ToApi(this PropertyProvider valueExpression) where T : ScopedApi + { + switch (typeof(T).Name) + { + case nameof(ClientResponseApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.ClientResponseApi.FromExpression(valueExpression); + case nameof(HttpResponseApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpResponseApi.FromExpression(valueExpression); + case nameof(HttpRequestOptionsApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.FromExpression(valueExpression); + case nameof(HttpMessageApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpMessageApi.FromExpression(valueExpression); + case nameof(HttpRequestApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.HttpRequestApi.FromExpression(valueExpression); + case nameof(ClientPipelineApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.FromExpression(valueExpression); + case nameof(StatusCodeClassifierApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.StatusCodeClassifierApi.FromExpression(valueExpression); + case nameof(RequestContentApi): + return (T)(object)ClientModelPlugin.Instance.TypeFactory.RequestContentApi.FromExpression(valueExpression); + default: + throw new InvalidOperationException($"Invalid type {typeof(T)}"); + } + } } } diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs index 2d677bb6690..0dbf23902ec 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsDefinition.cs @@ -28,9 +28,9 @@ public ClientPipelineExtensionsDefinition() _pipelineParam = new ParameterProvider("pipeline", FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.ClientPipelineApi.ClientPipelineType); _messageParam = new ParameterProvider("message", FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.HttpMessageApi.HttpMessageType); _requestOptionsParam = new ParameterProvider(ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.ParameterName, FormattableStringHelpers.Empty, ClientModelPlugin.Instance.TypeFactory.HttpRequestOptionsApi.HttpRequestOptionsType); - _pipeline = _pipelineParam.AsExpression.ToApi(); - _message = _messageParam.AsExpression.ToApi(); - _options = _requestOptionsParam.AsExpression.ToApi(); + _pipeline = _pipelineParam.ToApi(); + _message = _messageParam.ToApi(); + _options = _requestOptionsParam.ToApi(); } protected override TypeSignatureModifiers GetDeclarationModifiers() diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs index f0e9b065db7..99dafe5aa38 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/RestClientProvider.cs @@ -131,7 +131,7 @@ private bool IsCreateRequest(MethodProvider method) private MethodProvider BuildCreateRequestMethod(InputOperation operation) { - var pipelineField = ((MemberExpression)ClientProvider.PipelineProperty).ToApi(); + var pipelineField = ClientProvider.PipelineProperty.ToApi(); var options = ScmKnownParameters.RequestOptions; var signature = new MethodSignature( @@ -165,8 +165,8 @@ private MethodProvider BuildCreateRequestMethod(InputOperation operation) signature, new MethodBodyStatements( [ - Declare("message", pipelineField.CreateMessage(options.AsExpression.ToApi(), classifier).ToApi(), out HttpMessageApi message), - message.ApplyResponseClassifier(((MemberExpression)classifier).ToApi()), + Declare("message", pipelineField.CreateMessage(options.ToApi(), classifier).ToApi(), out HttpMessageApi message), + message.ApplyResponseClassifier(classifier.ToApi()), Declare("request", message.Request().ToApi(), out HttpRequestApi request), request.SetMethod(operation.HttpMethod), Declare("uri", New.Instance(), out ScopedApi uri), @@ -176,7 +176,7 @@ .. AppendQueryParameters(uri, operation, paramMap), request.SetUri(uri), .. AppendHeaderParameters(request, operation, paramMap), .. GetSetContent(request, signature.Parameters), - message.ApplyRequestOptions(options.AsExpression.ToApi()), + message.ApplyRequestOptions(options.ToApi()), Return(message) ]), this); diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs index 59cfc32452e..6521c69af86 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs @@ -13,14 +13,14 @@ namespace Microsoft.Generator.CSharp.Snippets { public static partial class Snippet { - public static ScopedApi As(this ParameterProvider parameter, CSharpType type) => parameter.AsExpression.As(type); - public static ScopedApi As(this ParameterProvider parameter) => parameter.AsExpression.As(); - public static ScopedApi As(this PropertyProvider property) => ((MemberExpression)property).As(); - public static ScopedApi As(this FieldProvider field) => ((MemberExpression)field).As(); + public static ScopedApi As(this ParameterProvider parameter, CSharpType type) => parameter.As(type); + public static ScopedApi As(this ParameterProvider parameter) => parameter.As(); + public static ScopedApi As(this PropertyProvider property) => property.As(); + public static ScopedApi As(this FieldProvider field) => field.As(); public static ValueExpression NullConditional(this ParameterProvider parameter) => new NullConditionalExpression(parameter); - public static ValueExpression NullCoalesce(this ParameterProvider parameter, ValueExpression value) => parameter.AsExpression.NullCoalesce(value); + public static ValueExpression NullCoalesce(this ParameterProvider parameter, ValueExpression value) => parameter.NullCoalesce(value); public static DictionaryExpression AsDictionary(this FieldProvider field, CSharpType keyType, CSharpType valueType) => new(new KeyValuePairType(keyType, valueType), field); public static DictionaryExpression AsDictionary(this ParameterProvider parameter, CSharpType keyType, CSharpType valueType) => new(new KeyValuePairType(keyType, valueType), parameter); From 5535e4431771b3212a2844ad6653afc0182cf845 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 30 Oct 2024 10:23:18 +0800 Subject: [PATCH 12/12] revert --- .../Microsoft.Generator.CSharp/src/Snippets/Snippet.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs index 6521c69af86..59cfc32452e 100644 --- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs +++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.cs @@ -13,14 +13,14 @@ namespace Microsoft.Generator.CSharp.Snippets { public static partial class Snippet { - public static ScopedApi As(this ParameterProvider parameter, CSharpType type) => parameter.As(type); - public static ScopedApi As(this ParameterProvider parameter) => parameter.As(); - public static ScopedApi As(this PropertyProvider property) => property.As(); - public static ScopedApi As(this FieldProvider field) => field.As(); + public static ScopedApi As(this ParameterProvider parameter, CSharpType type) => parameter.AsExpression.As(type); + public static ScopedApi As(this ParameterProvider parameter) => parameter.AsExpression.As(); + public static ScopedApi As(this PropertyProvider property) => ((MemberExpression)property).As(); + public static ScopedApi As(this FieldProvider field) => ((MemberExpression)field).As(); public static ValueExpression NullConditional(this ParameterProvider parameter) => new NullConditionalExpression(parameter); - public static ValueExpression NullCoalesce(this ParameterProvider parameter, ValueExpression value) => parameter.NullCoalesce(value); + public static ValueExpression NullCoalesce(this ParameterProvider parameter, ValueExpression value) => parameter.AsExpression.NullCoalesce(value); public static DictionaryExpression AsDictionary(this FieldProvider field, CSharpType keyType, CSharpType valueType) => new(new KeyValuePairType(keyType, valueType), field); public static DictionaryExpression AsDictionary(this ParameterProvider parameter, CSharpType keyType, CSharpType valueType) => new(new KeyValuePairType(keyType, valueType), parameter);