Skip to content

Commit 6f4c8eb

Browse files
Add Cbor request and structure marshallers generators
1 parent 1c3f3aa commit 6f4c8eb

File tree

6 files changed

+2345
-1
lines changed

6 files changed

+2345
-1
lines changed

generator/ServiceClientGeneratorLib/GeneratorDriver.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ internal static bool WriteFile(string baseOutputDir,
13551355
/// Sets the marshaller of the generator based on the service type
13561356
/// </summary>
13571357
/// <param name="marshaller">The marshaller to be set</param>
1358-
/// <param name="normalizeMarshallers">If the service type is a type of json then normalizeMarshallers is set to true, false otherwise</param>
1358+
/// <param name="normalizeMarshallers">If the service type is using structure marshallers then normalizeMarshallers is set to true, false otherwise</param>
13591359
void GetRequestMarshaller(out BaseRequestMarshaller marshaller, out bool normalizeMarshallers)
13601360
{
13611361
normalizeMarshallers = false;
@@ -1366,6 +1366,10 @@ void GetRequestMarshaller(out BaseRequestMarshaller marshaller, out bool normali
13661366
marshaller = new JsonRPCRequestMarshaller();
13671367
normalizeMarshallers = true;
13681368
break;
1369+
case ServiceType.Cbor:
1370+
marshaller = new CborRequestMarshaller();
1371+
normalizeMarshallers = true;
1372+
break;
13691373
case ServiceType.Query:
13701374
marshaller = new AWSQueryRequestMarshaller();
13711375
break;
@@ -1388,6 +1392,8 @@ BaseRequestMarshaller GetStructureMarshaller()
13881392
case ServiceType.Rest_Json:
13891393
case ServiceType.Json:
13901394
return new JsonRPCStructureMarshaller();
1395+
case ServiceType.Cbor:
1396+
return new CborStructureMarshaller();
13911397
default:
13921398
throw new Exception("No structure marshaller for service type: " + this.Configuration.ServiceModel.Type);
13931399
}
@@ -1409,6 +1415,8 @@ BaseResponseUnmarshaller GetResponseUnmarshaller()
14091415
return new AWSQueryResponseUnmarshaller();
14101416
case ServiceType.Rest_Xml:
14111417
return new RestXmlResponseUnmarshaller();
1418+
case ServiceType.Cbor:
1419+
return new CborResponseUnmarshaller();
14121420
default:
14131421
throw new Exception("No response unmarshaller for service type: " + this.Configuration.ServiceModel.Type);
14141422
}
@@ -1429,6 +1437,8 @@ BaseResponseUnmarshaller GetStructureUnmarshaller()
14291437
return new AWSQueryStructureUnmarshaller();
14301438
case ServiceType.Rest_Xml:
14311439
return new RestXmlStructureUnmarshaller();
1440+
case ServiceType.Cbor:
1441+
return new CborStructureUnmarshaller();
14321442
default:
14331443
throw new Exception("No structure unmarshaller for service type: " + this.Configuration.ServiceModel.Type);
14341444
}
@@ -1448,6 +1458,8 @@ BaseResponseUnmarshaller GetExceptionUnmarshaller()
14481458
return new AWSQueryExceptionUnmarshaller();
14491459
case ServiceType.Rest_Xml:
14501460
return new RestXmlExceptionUnmarshaller();
1461+
case ServiceType.Cbor:
1462+
return new CborExceptionUnmarshaller();
14511463
default:
14521464
throw new Exception("No structure unmarshaller for service type: " + this.Configuration.ServiceModel.Type);
14531465
}
Lines changed: 343 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,343 @@
1+
// ------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by a tool.
4+
// Runtime Version: 17.0.0.0
5+
//
6+
// Changes to this file may cause incorrect behavior and will be lost if
7+
// the code is regenerated.
8+
// </auto-generated>
9+
// ------------------------------------------------------------------------------
10+
namespace ServiceClientGenerator.Generators.Marshallers
11+
{
12+
using System.Linq;
13+
using System.Text;
14+
using System.Collections.Generic;
15+
using System;
16+
17+
/// <summary>
18+
/// Class to produce the template output
19+
/// </summary>
20+
21+
#line 1 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
22+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "17.0.0.0")]
23+
public partial class CborRequestMarshaller : CborStructureMarshaller
24+
{
25+
#line hidden
26+
/// <summary>
27+
/// Create the template output
28+
/// </summary>
29+
public override string TransformText()
30+
{
31+
32+
#line 6 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
33+
34+
AddLicenseHeader();
35+
36+
AddCommonUsingStatements();
37+
38+
39+
#line default
40+
#line hidden
41+
this.Write("using AWSSDK.Extensions.CborProtocol;\r\nusing AWSSDK.Extensions.CborProtocol.Inter" +
42+
"nal;\r\n\r\n#pragma warning disable CS0612,CS0618\r\nnamespace ");
43+
44+
#line 15 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
45+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Config.Namespace));
46+
47+
#line default
48+
#line hidden
49+
this.Write(".Model.Internal.MarshallTransformations\r\n{\r\n\t/// <summary>\r\n\t/// ");
50+
51+
#line 18 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
52+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Operation.Name));
53+
54+
#line default
55+
#line hidden
56+
this.Write(" Request Marshaller\r\n\t/// </summary> \r\n\tpublic class ");
57+
58+
#line 20 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
59+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Operation.Name));
60+
61+
#line default
62+
#line hidden
63+
this.Write("RequestMarshaller : IMarshaller<IRequest, ");
64+
65+
#line 20 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
66+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Operation.Name));
67+
68+
#line default
69+
#line hidden
70+
this.Write(@"Request> , IMarshaller<IRequest,AmazonWebServiceRequest>
71+
{
72+
/// <summary>
73+
/// Marshaller the request object to the HTTP request.
74+
/// </summary>
75+
/// <param name=""input""></param>
76+
/// <returns></returns>
77+
public IRequest Marshall(AmazonWebServiceRequest input)
78+
{
79+
return this.Marshall((");
80+
81+
#line 29 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
82+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Operation.Name));
83+
84+
#line default
85+
#line hidden
86+
this.Write("Request)input);\r\n }\r\n\r\n /// <summary>\r\n /// Marshaller the r" +
87+
"equest object to the HTTP request.\r\n /// </summary> \r\n /// <param" +
88+
" name=\"publicRequest\"></param>\r\n /// <returns></returns>\r\n\t\tpublic IReque" +
89+
"st Marshall(");
90+
91+
#line 37 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
92+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Operation.Name));
93+
94+
#line default
95+
#line hidden
96+
this.Write("Request publicRequest)\r\n\t\t{\r\n\t\t\tIRequest request = new DefaultRequest(publicReque" +
97+
"st, \"");
98+
99+
#line 39 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
100+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Config.Namespace));
101+
102+
#line default
103+
#line hidden
104+
this.Write("\");\r\n request.Headers[\"smithy-protocol\"] = \"rpc-v2-cbor\";\r\n");
105+
106+
#line 41 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
107+
108+
if (string.IsNullOrEmpty(this.Config.ServiceModel.TargetPrefix))
109+
{
110+
throw new System.InvalidOperationException("TargetPrefix is required for CBOR based services.");
111+
}
112+
113+
114+
#line default
115+
#line hidden
116+
this.Write("\t\t\trequest.ResourcePath = \"");
117+
118+
#line 47 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
119+
this.Write(this.ToStringHelper.ToStringWithCulture($"service/{this.Config.ServiceModel.TargetPrefix}/operation/{this.Operation.Name}"));
120+
121+
#line default
122+
#line hidden
123+
this.Write("\";\r\n");
124+
125+
#line 48 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
126+
127+
if ((this.Config.ServiceModel.H2Support == H2SupportDegree.Optional && this.Operation.IsEventStreamBidi) || (this.Config.ServiceModel.H2Support == H2SupportDegree.EventStream && this.Operation.IsEventStreamOutput) || this.Config.ServiceModel.H2Support == H2SupportDegree.Required)
128+
{
129+
130+
131+
#line default
132+
#line hidden
133+
this.Write("#if NET8_0_OR_GREATER\r\n request.HttpProtocolVersion = System.Net.HttpV" +
134+
"ersion.Version20;\r\n#endif\r\n");
135+
136+
#line 55 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
137+
138+
}
139+
if (this.Operation.IsEventStreamInput)
140+
{
141+
var eventStreamMember = this.Operation.RequestEventStreamingMember;
142+
143+
144+
#line default
145+
#line hidden
146+
this.Write(" request.Headers[\"Content-Type\"] = \"application/vnd.amazon.eventstream" +
147+
"\";\r\n request.EventStreamPublisher = new ");
148+
149+
#line 62 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
150+
this.Write(this.ToStringHelper.ToStringWithCulture(eventStreamMember.Shape.Name));
151+
152+
#line default
153+
#line hidden
154+
this.Write("PublisherMarshaller(publicRequest.");
155+
156+
#line 62 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
157+
this.Write(this.ToStringHelper.ToStringWithCulture(eventStreamMember.PropertyName));
158+
159+
#line default
160+
#line hidden
161+
this.Write(");\r\n");
162+
163+
#line 63 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
164+
165+
}
166+
else if (this.Operation.RequestHasBodyMembers || this.Operation.RequestPayloadMember != null)
167+
{
168+
169+
170+
#line default
171+
#line hidden
172+
this.Write("\t\t\trequest.Headers[\"Content-Type\"] = \"application/cbor\";\r\n");
173+
174+
#line 69 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
175+
176+
}
177+
178+
if (this.Operation.IsEventStreamOutput)
179+
{
180+
181+
182+
#line default
183+
#line hidden
184+
this.Write("\t\t\trequest.Headers[\"Accept\"] = \"application/vnd.amazon.eventstream\";\r\n");
185+
186+
#line 76 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
187+
188+
}
189+
else
190+
{
191+
192+
193+
#line default
194+
#line hidden
195+
this.Write("\t\t\trequest.Headers[\"Accept\"] = \"application/cbor\";\r\n");
196+
197+
#line 82 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
198+
199+
}
200+
201+
SetCompressionAlgorithmEncoding(this.Operation);
202+
203+
var payload = this.Operation.RequestPayloadMember;
204+
205+
206+
#line default
207+
#line hidden
208+
this.Write(" request.Headers[Amazon.Util.HeaderKeys.XAmzApiVersion] = \"");
209+
210+
#line 89 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
211+
this.Write(this.ToStringHelper.ToStringWithCulture(this.Config.ServiceModel.APIVersion));
212+
213+
#line default
214+
#line hidden
215+
this.Write("\";\r\n request.HttpMethod = \"POST\";\r\n\r\n");
216+
217+
#line 92 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
218+
219+
var requestStructure = this.Operation.RequestStructure;
220+
221+
// Generates code to add members of the request to the request being created by the marshaller
222+
ProcessRequestUri(this.Operation);
223+
224+
var shouldMarshallPayload = (payload != null && !payload.Shape.IsEventStream);
225+
// Process any members which are marshalled as part of the request body
226+
if (this.Operation.RequestHasBodyMembers || shouldMarshallPayload)
227+
{
228+
229+
230+
#line default
231+
#line hidden
232+
this.Write(" var writer = CborWriterPool.Rent();\r\n try\r\n {\r\n" +
233+
"");
234+
235+
#line 106 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
236+
237+
if (payload?.Shape.IsString == true)
238+
{
239+
240+
241+
#line default
242+
#line hidden
243+
this.Write("\t\t\t\twriter.WriteTextString(publicRequest.");
244+
245+
#line 110 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
246+
this.Write(this.ToStringHelper.ToStringWithCulture(payload.PropertyName));
247+
248+
#line default
249+
#line hidden
250+
this.Write(");\r\n");
251+
252+
#line 111 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
253+
254+
}
255+
else if (shouldMarshallPayload)
256+
{
257+
258+
259+
#line default
260+
#line hidden
261+
this.Write("\t\t\t\tvar context = new CborMarshallerContext(request, writer);\r\n\r\n");
262+
263+
#line 118 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
264+
265+
ProcessStructure(1, "publicRequest." + payload.PropertyName, payload.Shape);
266+
}
267+
else
268+
{
269+
270+
271+
#line default
272+
#line hidden
273+
this.Write("\t\t\t\twriter.WriteStartMap(null);\r\n\t\t\t\tvar context = new CborMarshallerContext(requ" +
274+
"est, writer);\r\n");
275+
276+
#line 126 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
277+
278+
ProcessMembers(1, "publicRequest", this.Operation.RequestBodyMembers);
279+
280+
281+
#line default
282+
#line hidden
283+
this.Write("\t\t\t\twriter.WriteEndMap();\r\n");
284+
285+
#line 130 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
286+
287+
}
288+
289+
290+
#line default
291+
#line hidden
292+
this.Write("\t\t\t\trequest.Content = writer.Encode();\r\n\t\t\t}\r\n finally\r\n {\r" +
293+
"\n CborWriterPool.Return(writer);\r\n }\r\n");
294+
295+
#line 139 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
296+
297+
GenerateRequestChecksumHandling(this.Operation, "snippet");
298+
299+
300+
#line default
301+
#line hidden
302+
this.Write("\t\t\t\r\n");
303+
304+
#line 142 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
305+
306+
}
307+
308+
if (this.Operation.UnsignedPayload)
309+
{
310+
311+
312+
#line default
313+
#line hidden
314+
this.Write("\t\t\trequest.DisablePayloadSigning = true;\r\n");
315+
316+
#line 149 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
317+
}
318+
319+
if (!string.IsNullOrEmpty(this.Operation.EndpointHostPrefix))
320+
{
321+
ProcessEndpointHostPrefixMembers(3, "publicRequest", this.Operation);
322+
}
323+
324+
325+
#line default
326+
#line hidden
327+
this.Write("\t\t\treturn request;\r\n\t\t}\r\n");
328+
329+
#line 158 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborRequestMarshaller.tt"
330+
331+
this.AddRequestSingletonMethod();
332+
333+
334+
#line default
335+
#line hidden
336+
this.Write("\t}\r\n}");
337+
return this.GenerationEnvironment.ToString();
338+
}
339+
}
340+
341+
#line default
342+
#line hidden
343+
}

0 commit comments

Comments
 (0)