Skip to content

Commit d0c258e

Browse files
authored
Update rest client and serialization generation for Azure plugin (#46835)
1 parent 02414e9 commit d0c258e

File tree

14 files changed

+194
-130
lines changed

14 files changed

+194
-130
lines changed

eng/Packages.Data.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@
252252
</ItemGroup>
253253

254254
<ItemGroup Condition="'$(IsGeneratorLibrary)' == 'true'">
255-
<PackageReference Update="Microsoft.Generator.CSharp.ClientModel" Version="1.0.0-alpha.20241022.3" />
255+
<PackageReference Update="Microsoft.Generator.CSharp.ClientModel" Version="1.0.0-alpha.20241030.4" />
256256
</ItemGroup>
257257

258258
<!--

eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpMessageProvider.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ public HttpMessageProvider(ValueExpression original) : base(typeof(HttpMessage),
2121

2222
public override CSharpType HttpMessageType => typeof(HttpMessage);
2323

24-
public override MethodBodyStatement Apply(ValueExpression options)
25-
=> MethodBodyStatement.Empty;
26-
2724
public override ValueExpression BufferResponse()
2825
=> Original.Property(nameof(HttpMessage.BufferResponse));
2926

@@ -39,9 +36,12 @@ public override HttpRequestApi Request()
3936
public override HttpResponseApi Response()
4037
=> new AzureResponseProvider(Original.Property(nameof(HttpMessage.Response)));
4138

42-
public override ValueExpression ResponseClassifier()
43-
=> Original.Property(nameof(HttpMessage.ResponseClassifier));
44-
4539
public override HttpMessageApi ToExpression() => this;
40+
41+
public override MethodBodyStatement ApplyResponseClassifier(StatusCodeClassifierApi statusCodeClassifier)
42+
=> MethodBodyStatement.Empty;
43+
44+
public override MethodBodyStatement ApplyRequestOptions(HttpRequestOptionsApi options)
45+
=> MethodBodyStatement.Empty;
4646
}
4747
}

eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpPipelineProvider.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Generator.CSharp.ClientModel.Providers;
77
using Microsoft.Generator.CSharp.Expressions;
88
using Microsoft.Generator.CSharp.Primitives;
9+
using Microsoft.Generator.CSharp.Statements;
910
using static Microsoft.Generator.CSharp.Snippets.Snippet;
1011

1112
namespace Azure.Generator.Providers.Abstraction
@@ -28,9 +29,6 @@ public HttpPipelineProvider(ValueExpression original) : base(typeof(HttpPipeline
2829
public override ValueExpression Create(ValueExpression options, ValueExpression perRetryPolicies)
2930
=> Static(typeof(HttpPipelineBuilder)).Invoke(nameof(HttpPipelineBuilder.Build), [options, perRetryPolicies]);
3031

31-
public override HttpMessageApi CreateMessage()
32-
=> new HttpMessageProvider(Original.Invoke(nameof(HttpPipeline.CreateMessage)));
33-
3432
public override ValueExpression CreateMessage(HttpRequestOptionsApi requestOptions, ValueExpression responseClassifier)
3533
=> Original.Invoke(nameof(HttpPipeline.CreateMessage), requestOptions, responseClassifier).As<HttpMessage>();
3634

@@ -40,12 +38,12 @@ public override ClientPipelineApi FromExpression(ValueExpression expression)
4038
public override ValueExpression PerRetryPolicy(params ValueExpression[] arguments)
4139
=> Empty; // TODO: implement with default retry policy for Azure
4240

43-
public override InvokeMethodExpression Send(HttpMessageApi message)
44-
=> Original.Invoke(nameof(HttpPipeline.Send), [message, Default]);
41+
public override ClientPipelineApi ToExpression() => this;
4542

46-
public override InvokeMethodExpression SendAsync(HttpMessageApi message)
47-
=> Original.Invoke(nameof(HttpPipeline.SendAsync), [message, Default], true);
43+
public override MethodBodyStatement Send(HttpMessageApi message, HttpRequestOptionsApi options)
44+
=> Original.Invoke(nameof(HttpPipeline.Send), [message, Default]).Terminate();
4845

49-
public override ClientPipelineApi ToExpression() => this;
46+
public override MethodBodyStatement SendAsync(HttpMessageApi message, HttpRequestOptionsApi options)
47+
=> Original.Invoke(nameof(HttpPipeline.SendAsync), [message, Default], true).Terminate();
5048
}
5149
}

eng/packages/http-client-csharp/generator/Azure.Generator/src/Providers/Abstraction/HttpRequestProvider.cs

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
using Azure.Core;
55
using Microsoft.Generator.CSharp.ClientModel.Providers;
66
using Microsoft.Generator.CSharp.Expressions;
7-
using Microsoft.Generator.CSharp.Snippets;
7+
using Microsoft.Generator.CSharp.Statements;
8+
using System;
89
using System.ClientModel.Primitives;
910
using System.Collections.Generic;
1011
using static Microsoft.Generator.CSharp.Snippets.Snippet;
@@ -26,15 +27,79 @@ public override ValueExpression Content()
2627
public override HttpRequestApi FromExpression(ValueExpression original)
2728
=> new HttpRequestProvider(original);
2829

29-
public override InvokeMethodExpression SetHeaders(IReadOnlyList<ValueExpression> arguments)
30-
=> Original.Property(nameof(PipelineRequest.Headers)).Invoke(nameof(RequestHeaders.Add), arguments);
30+
public override MethodBodyStatement SetHeaders(IReadOnlyList<ValueExpression> arguments)
31+
=> Original.Property(nameof(PipelineRequest.Headers)).Invoke(nameof(RequestHeaders.SetValue), arguments).Terminate();
3132

32-
public override AssignmentExpression SetMethod(string httpMethod)
33-
=> Original.Property(nameof(PipelineRequest.Method)).Assign(New.Instance(typeof(RequestMethod), [Literal(httpMethod)]));
33+
public override MethodBodyStatement SetMethod(string httpMethod)
34+
=> Original.Property(nameof(PipelineRequest.Method)).Assign(CreateRequestMethod(httpMethod)).Terminate();
3435

35-
public override AssignmentExpression SetUri(ValueExpression value)
36-
=> Original.Property("Uri").Assign(value);
36+
public override MethodBodyStatement SetUri(ValueExpression value)
37+
=> Original.Property("Uri").Assign(value).Terminate();
3738

3839
public override HttpRequestApi ToExpression() => this;
40+
41+
private ValueExpression CreateRequestMethod(string httpMethod)
42+
{
43+
var httpMethodString = ParseHttpMethodString(httpMethod);
44+
return httpMethodString is null
45+
? New.Instance(typeof(RequestMethod), [Literal(httpMethod)])
46+
: Static<RequestMethod>().Property(httpMethodString);
47+
}
48+
49+
private string? ParseHttpMethodString(string method)
50+
{
51+
if (method == null)
52+
{
53+
throw new ArgumentNullException(nameof(method));
54+
}
55+
if (method.Length == 3)
56+
{
57+
if (string.Equals(method, "GET", StringComparison.OrdinalIgnoreCase))
58+
{
59+
return "Get";
60+
}
61+
62+
if (string.Equals(method, "PUT", StringComparison.OrdinalIgnoreCase))
63+
{
64+
return "Put";
65+
}
66+
}
67+
else if (method.Length == 4)
68+
{
69+
if (string.Equals(method, "POST", StringComparison.OrdinalIgnoreCase))
70+
{
71+
return "Post";
72+
}
73+
74+
if (string.Equals(method, "HEAD", StringComparison.OrdinalIgnoreCase))
75+
{
76+
return "Head";
77+
}
78+
}
79+
else
80+
{
81+
if (string.Equals(method, "PATCH", StringComparison.OrdinalIgnoreCase))
82+
{
83+
return "Patch";
84+
}
85+
86+
if (string.Equals(method, "DELETE", StringComparison.OrdinalIgnoreCase))
87+
{
88+
return "Delete";
89+
}
90+
91+
if (string.Equals(method, "OPTIONS", StringComparison.OrdinalIgnoreCase))
92+
{
93+
return "Options";
94+
}
95+
96+
if (string.Equals(method, "TRACE", StringComparison.OrdinalIgnoreCase))
97+
{
98+
return "Trace";
99+
}
100+
}
101+
102+
return null;
103+
}
39104
}
40105
}

0 commit comments

Comments
 (0)