@azure-tools/typespec-rust 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/src/codegen/cargotoml.d.ts +3 -0
  4. package/dist/src/codegen/cargotoml.d.ts.map +1 -0
  5. package/dist/src/codegen/cargotoml.js +22 -0
  6. package/dist/src/codegen/cargotoml.js.map +1 -0
  7. package/dist/src/codegen/clients.d.ts +7 -0
  8. package/dist/src/codegen/clients.d.ts.map +1 -0
  9. package/dist/src/codegen/clients.js +514 -0
  10. package/dist/src/codegen/clients.js.map +1 -0
  11. package/dist/src/codegen/codeGenerator.d.ts +14 -0
  12. package/dist/src/codegen/codeGenerator.d.ts.map +1 -0
  13. package/dist/src/codegen/codeGenerator.js +46 -0
  14. package/dist/src/codegen/codeGenerator.js.map +1 -0
  15. package/dist/src/codegen/context.d.ts +10 -0
  16. package/dist/src/codegen/context.d.ts.map +1 -0
  17. package/dist/src/codegen/context.js +75 -0
  18. package/dist/src/codegen/context.js.map +1 -0
  19. package/dist/src/codegen/enums.d.ts +4 -0
  20. package/dist/src/codegen/enums.d.ts.map +1 -0
  21. package/dist/src/codegen/enums.js +48 -0
  22. package/dist/src/codegen/enums.js.map +1 -0
  23. package/dist/src/codegen/helpers.d.ts +18 -0
  24. package/dist/src/codegen/helpers.d.ts.map +1 -0
  25. package/dist/src/codegen/helpers.js +133 -0
  26. package/dist/src/codegen/helpers.js.map +1 -0
  27. package/dist/src/codegen/lib.d.ts +3 -0
  28. package/dist/src/codegen/lib.d.ts.map +1 -0
  29. package/dist/src/codegen/lib.js +37 -0
  30. package/dist/src/codegen/lib.js.map +1 -0
  31. package/dist/src/codegen/mod.d.ts +3 -0
  32. package/dist/src/codegen/mod.d.ts.map +1 -0
  33. package/dist/src/codegen/mod.js +20 -0
  34. package/dist/src/codegen/mod.js.map +1 -0
  35. package/dist/src/codegen/models.d.ts +4 -0
  36. package/dist/src/codegen/models.d.ts.map +1 -0
  37. package/dist/src/codegen/models.js +45 -0
  38. package/dist/src/codegen/models.js.map +1 -0
  39. package/dist/src/codegen/use.d.ts +11 -0
  40. package/dist/src/codegen/use.d.ts.map +1 -0
  41. package/dist/src/codegen/use.js +105 -0
  42. package/dist/src/codegen/use.js.map +1 -0
  43. package/dist/src/codemodel/client.d.ts +137 -0
  44. package/dist/src/codemodel/client.d.ts.map +1 -0
  45. package/dist/src/codemodel/client.js +146 -0
  46. package/dist/src/codemodel/client.js.map +1 -0
  47. package/dist/src/codemodel/crate.d.ts +24 -0
  48. package/dist/src/codemodel/crate.d.ts.map +1 -0
  49. package/dist/src/codemodel/crate.js +53 -0
  50. package/dist/src/codemodel/crate.js.map +1 -0
  51. package/dist/src/codemodel/index.d.ts +5 -0
  52. package/dist/src/codemodel/index.d.ts.map +1 -0
  53. package/dist/src/codemodel/index.js +9 -0
  54. package/dist/src/codemodel/index.js.map +1 -0
  55. package/dist/src/codemodel/method.d.ts +32 -0
  56. package/dist/src/codemodel/method.d.ts.map +1 -0
  57. package/dist/src/codemodel/method.js +33 -0
  58. package/dist/src/codemodel/method.js.map +1 -0
  59. package/dist/src/codemodel/types.d.ts +224 -0
  60. package/dist/src/codemodel/types.d.ts.map +1 -0
  61. package/dist/src/codemodel/types.js +248 -0
  62. package/dist/src/codemodel/types.js.map +1 -0
  63. package/dist/src/emitter.d.ts +5 -0
  64. package/dist/src/emitter.d.ts.map +1 -0
  65. package/dist/src/emitter.js +45 -0
  66. package/dist/src/emitter.js.map +1 -0
  67. package/dist/src/index.d.ts +3 -0
  68. package/dist/src/index.d.ts.map +1 -0
  69. package/dist/src/index.js +7 -0
  70. package/dist/src/index.js.map +1 -0
  71. package/dist/src/lib.d.ts +13 -0
  72. package/dist/src/lib.d.ts.map +1 -0
  73. package/dist/src/lib.js +24 -0
  74. package/dist/src/lib.js.map +1 -0
  75. package/dist/src/tcgcadapter/adapter.d.ts +25 -0
  76. package/dist/src/tcgcadapter/adapter.d.ts.map +1 -0
  77. package/dist/src/tcgcadapter/adapter.js +617 -0
  78. package/dist/src/tcgcadapter/adapter.js.map +1 -0
  79. package/dist/src/tcgcadapter/helpers.d.ts +4 -0
  80. package/dist/src/tcgcadapter/helpers.d.ts.map +1 -0
  81. package/dist/src/tcgcadapter/helpers.js +45 -0
  82. package/dist/src/tcgcadapter/helpers.js.map +1 -0
  83. package/dist/src/tcgcadapter/naming.d.ts +2 -0
  84. package/dist/src/tcgcadapter/naming.d.ts.map +1 -0
  85. package/dist/src/tcgcadapter/naming.js +27 -0
  86. package/dist/src/tcgcadapter/naming.js.map +1 -0
  87. package/package.json +87 -0
@@ -0,0 +1,617 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import * as codegen from '@azure-tools/codegen';
6
+ import { values } from '@azure-tools/linq';
7
+ import * as helpers from './helpers.js';
8
+ import * as naming from './naming.js';
9
+ import * as tcgc from '@azure-tools/typespec-client-generator-core';
10
+ import * as rust from '../codemodel/index.js';
11
+ // Adapter converts the tcgc code model to a Rust Crate
12
+ export class Adapter {
13
+ static async create(context) {
14
+ const ctx = await tcgc.createSdkContext(context);
15
+ return new Adapter(ctx, context.options);
16
+ }
17
+ constructor(ctx, options) {
18
+ this.types = new Map();
19
+ this.clientMethodParams = new Map();
20
+ this.ctx = ctx;
21
+ let serviceType = 'data-plane';
22
+ if (this.ctx.arm === true) {
23
+ serviceType = 'azure-arm';
24
+ }
25
+ this.crate = new rust.Crate(options['crate-name'], options['crate-version'], serviceType);
26
+ }
27
+ // performs all the steps to convert tcgc to a crate
28
+ tcgcToCrate() {
29
+ this.adaptTypes();
30
+ this.adaptClients();
31
+ if (this.crate.enums.length > 0 || this.crate.models.length > 0) {
32
+ this.crate.addDependency(new rust.CrateDependency('serde'));
33
+ }
34
+ if (this.crate.clients.length > 0) {
35
+ this.crate.addDependency(new rust.CrateDependency('async-std'));
36
+ }
37
+ this.crate.sortContent();
38
+ return this.crate;
39
+ }
40
+ // converts all tcgc types to their Rust type equivalent
41
+ adaptTypes() {
42
+ for (const sdkEnum of this.ctx.sdkPackage.enums) {
43
+ if ((sdkEnum.usage & tcgc.UsageFlags.ApiVersionEnum) === tcgc.UsageFlags.ApiVersionEnum) {
44
+ // we skip generating the enums for API
45
+ // versions as we expose it as a String
46
+ continue;
47
+ }
48
+ const rustEnum = this.getEnum(sdkEnum);
49
+ this.crate.enums.push(rustEnum);
50
+ }
51
+ for (const model of this.ctx.sdkPackage.models) {
52
+ if (model.usage === tcgc.UsageFlags.Error) {
53
+ // if the model is purely used for errors then
54
+ // skip it as we use azure_core::Error.
55
+ continue;
56
+ }
57
+ const rustModel = this.getModel(model);
58
+ this.crate.models.push(rustModel);
59
+ }
60
+ }
61
+ // converts a tcgc enum to a Rust enum
62
+ getEnum(sdkEnum) {
63
+ const enumName = codegen.capitalize(sdkEnum.name);
64
+ let rustEnum = this.types.get(enumName);
65
+ if (rustEnum) {
66
+ return rustEnum;
67
+ }
68
+ // first create all of the enum values
69
+ const values = new Array();
70
+ for (const value of sdkEnum.values) {
71
+ const rustEnumValue = new rust.EnumValue(helpers.fixUpEnumValueName(value.name), value.value);
72
+ values.push(rustEnumValue);
73
+ }
74
+ rustEnum = new rust.Enum(enumName, isPub(sdkEnum.access), values, !sdkEnum.isFixed);
75
+ this.types.set(enumName, rustEnum);
76
+ return rustEnum;
77
+ }
78
+ // converts a tcgc model to a Rust model
79
+ getModel(model) {
80
+ if (model.name.length === 0) {
81
+ throw new Error('unnamed model'); // TODO: this might no longer be an issue
82
+ }
83
+ const modelName = codegen.capitalize(model.name);
84
+ let rustModel = this.types.get(modelName);
85
+ if (rustModel) {
86
+ return rustModel;
87
+ }
88
+ rustModel = new rust.Model(modelName, isPub(model.access));
89
+ rustModel.docs.summary = model.summary;
90
+ rustModel.docs.description = model.doc;
91
+ this.types.set(modelName, rustModel);
92
+ for (const property of model.properties) {
93
+ if (property.kind !== 'property') {
94
+ // TODO: https://github.com/Azure/typespec-rust/issues/96
95
+ throw new Error(`model property kind ${property.kind} NYI`);
96
+ }
97
+ const structField = this.getModelField(property);
98
+ rustModel.fields.push(structField);
99
+ }
100
+ return rustModel;
101
+ }
102
+ // converts a tcgc model property to a model field
103
+ getModelField(property) {
104
+ const fieldType = new rust.Option(this.getType(property.type), false);
105
+ const modelField = new rust.ModelField(naming.getEscapedReservedName(snakeCaseName(property.name), 'prop'), property.serializedName, true, fieldType);
106
+ modelField.docs.summary = property.summary;
107
+ modelField.docs.description = property.doc;
108
+ return modelField;
109
+ }
110
+ // converts a tcgc type to a Rust type
111
+ getType(type) {
112
+ const getScalar = (kind) => {
113
+ let scalar = this.types.get(kind);
114
+ if (scalar) {
115
+ return scalar;
116
+ }
117
+ let scalarType;
118
+ switch (kind) {
119
+ case 'boolean':
120
+ scalarType = 'bool';
121
+ break;
122
+ case 'float32':
123
+ scalarType = 'f32';
124
+ break;
125
+ case 'float64':
126
+ scalarType = 'f64';
127
+ break;
128
+ case 'int16':
129
+ scalarType = 'i16';
130
+ break;
131
+ case 'int32':
132
+ scalarType = 'i32';
133
+ break;
134
+ case 'int64':
135
+ scalarType = 'i64';
136
+ break;
137
+ case 'int8':
138
+ scalarType = 'i8';
139
+ break;
140
+ }
141
+ scalar = new rust.Scalar(scalarType);
142
+ this.types.set(kind, scalar);
143
+ return scalar;
144
+ };
145
+ switch (type.kind) {
146
+ case 'array': {
147
+ const keyName = recursiveKeyName(type.kind, type.valueType);
148
+ let vectorType = this.types.get(keyName);
149
+ if (vectorType) {
150
+ return vectorType;
151
+ }
152
+ vectorType = new rust.Vector(this.getType(type.valueType));
153
+ this.types.set(keyName, vectorType);
154
+ return vectorType;
155
+ }
156
+ case 'bytes': {
157
+ let encoding = 'std';
158
+ if (type.encode === 'base64url') {
159
+ encoding = 'url';
160
+ }
161
+ const keyName = `encodedBytes-${encoding}`;
162
+ let encodedBytesType = this.types.get(keyName);
163
+ if (encodedBytesType) {
164
+ return encodedBytesType;
165
+ }
166
+ encodedBytesType = new rust.EncodedBytes(encoding);
167
+ this.types.set(keyName, encodedBytesType);
168
+ return encodedBytesType;
169
+ }
170
+ case 'constant':
171
+ return this.getLiteral(type);
172
+ case 'dict': {
173
+ const keyName = recursiveKeyName(type.kind, type.valueType);
174
+ let hashmapType = this.types.get(keyName);
175
+ if (hashmapType) {
176
+ return hashmapType;
177
+ }
178
+ hashmapType = new rust.HashMap(this.getType(type.valueType));
179
+ this.types.set(keyName, hashmapType);
180
+ return hashmapType;
181
+ }
182
+ case 'boolean':
183
+ case 'float32':
184
+ case 'float64':
185
+ case 'int16':
186
+ case 'int32':
187
+ case 'int64':
188
+ case 'int8':
189
+ return getScalar(type.kind);
190
+ case 'enum':
191
+ return this.getEnum(type);
192
+ case 'model':
193
+ return this.getModel(type);
194
+ case 'endpoint':
195
+ case 'string': {
196
+ let stringType = this.types.get(type.kind);
197
+ if (stringType) {
198
+ return stringType;
199
+ }
200
+ stringType = new rust.StringType();
201
+ this.types.set(type.kind, stringType);
202
+ return stringType;
203
+ }
204
+ case 'unknown': {
205
+ let anyType = this.types.get(type.kind);
206
+ if (anyType) {
207
+ return anyType;
208
+ }
209
+ anyType = new rust.JsonValue(this.crate);
210
+ this.types.set(type.kind, anyType);
211
+ return anyType;
212
+ }
213
+ case 'url': {
214
+ let urlType = this.types.get(type.kind);
215
+ if (urlType) {
216
+ return urlType;
217
+ }
218
+ urlType = new rust.Url(this.crate);
219
+ this.types.set(type.kind, urlType);
220
+ return urlType;
221
+ }
222
+ case 'utcDateTime': {
223
+ const keyName = `${type.kind}-${type.encode}`;
224
+ let timeType = this.types.get(keyName);
225
+ if (timeType) {
226
+ return timeType;
227
+ }
228
+ timeType = new rust.OffsetDateTime(this.crate, type.encode);
229
+ this.types.set(keyName, timeType);
230
+ return timeType;
231
+ }
232
+ default:
233
+ throw new Error(`unhandled tcgc type ${type.kind}`);
234
+ }
235
+ }
236
+ getUnitType() {
237
+ const typeKey = 'rust-unit';
238
+ let unitType = this.types.get(typeKey);
239
+ if (unitType) {
240
+ return unitType;
241
+ }
242
+ unitType = new rust.Unit();
243
+ this.types.set(typeKey, unitType);
244
+ return unitType;
245
+ }
246
+ getLiteral(constType) {
247
+ const literalKey = `literal-${constType.value}`;
248
+ let literalType = this.types.get(literalKey);
249
+ if (literalType) {
250
+ return literalType;
251
+ }
252
+ literalType = new rust.Literal(constType.value);
253
+ this.types.set(literalKey, literalType);
254
+ return literalType;
255
+ }
256
+ // converts all tcgc clients and their methods into Rust clients/methods
257
+ adaptClients() {
258
+ for (const client of this.ctx.sdkPackage.clients) {
259
+ if (client.methods.length === 0) {
260
+ // skip generating empty clients
261
+ continue;
262
+ }
263
+ // start with instantiable clients and recursively work down
264
+ if (client.initialization.access === 'public') {
265
+ this.recursiveAdaptClient(client);
266
+ }
267
+ }
268
+ }
269
+ // recursively adapts a client and its methods.
270
+ // this simplifies the case for hierarchical clients.
271
+ recursiveAdaptClient(client, parent) {
272
+ let clientName = client.name;
273
+ if (parent) {
274
+ // for hierarchical clients, the child client names are built
275
+ // from the parent client name. this is because tsp allows subclients
276
+ // with the same name. consider the following example.
277
+ //
278
+ // namespace Chat {
279
+ // interface Completions {
280
+ // ...
281
+ // }
282
+ // }
283
+ // interface Completions { ... }
284
+ //
285
+ // we want to generate two clients from this,
286
+ // one name ChatCompletions and the other Completions
287
+ // strip off the Client suffix from the parent client name
288
+ clientName = parent.name.substring(0, parent.name.length - 6) + clientName;
289
+ }
290
+ // only add the Client suffix to instantiable clients
291
+ if (!clientName.match(/Client$/) && !parent) {
292
+ clientName += 'Client';
293
+ }
294
+ const rustClient = new rust.Client(clientName);
295
+ rustClient.docs.summary = client.summary;
296
+ rustClient.docs.description = client.doc;
297
+ rustClient.parent = parent;
298
+ // anything other than public means non-instantiable client
299
+ if (client.initialization.access === 'public') {
300
+ const clientOptionsStruct = new rust.Struct(`${rustClient.name}Options`, true);
301
+ const clientOptionsField = new rust.StructField('client_options', false, new rust.ExternalType(this.crate, 'azure_core', 'ClientOptions'));
302
+ clientOptionsField.defaultValue = 'ClientOptions::default()';
303
+ clientOptionsStruct.fields.push(clientOptionsField);
304
+ rustClient.constructable = new rust.ClientConstruction(new rust.ClientOptions(clientOptionsStruct));
305
+ // NOTE: per tcgc convention, if there is no param of kind credential
306
+ // it means that the client doesn't require any kind of authentication.
307
+ // HOWEVER, if there *is* a credential param, then the client *does not*
308
+ // automatically support unauthenticated requests. a credential with
309
+ // the noAuth scheme indicates support for unauthenticated requests.
310
+ // bit flags for auth types
311
+ let AuthTypes;
312
+ (function (AuthTypes) {
313
+ AuthTypes[AuthTypes["Default"] = 0] = "Default";
314
+ AuthTypes[AuthTypes["NoAuth"] = 1] = "NoAuth";
315
+ AuthTypes[AuthTypes["WithAut"] = 2] = "WithAut";
316
+ })(AuthTypes || (AuthTypes = {}));
317
+ let authType = AuthTypes.Default;
318
+ const ctorParams = new Array();
319
+ for (const param of client.initialization.properties) {
320
+ switch (param.kind) {
321
+ case 'credential':
322
+ switch (param.type.kind) {
323
+ case 'credential':
324
+ switch (param.type.scheme.type) {
325
+ case 'noAuth':
326
+ authType |= AuthTypes.NoAuth;
327
+ break;
328
+ case 'oauth2': {
329
+ authType |= AuthTypes.WithAut;
330
+ if (param.type.scheme.flows.length === 0) {
331
+ throw new Error(`no flows defined for credential type ${param.type.scheme.type}`);
332
+ }
333
+ const scopes = new Array();
334
+ for (const scope of param.type.scheme.flows[0].scopes) {
335
+ scopes.push(scope.value);
336
+ }
337
+ const ctorTokenCredential = new rust.Constructor('new');
338
+ ctorTokenCredential.parameters.push(new rust.ClientParameter('credential', new rust.Arc(new rust.TokenCredential(this.crate, scopes))));
339
+ rustClient.constructable.constructors.push(ctorTokenCredential);
340
+ break;
341
+ }
342
+ default:
343
+ // TODO: https://github.com/Azure/typespec-rust/issues/57
344
+ throw new Error(`credential scheme type ${param.type.scheme.type} NYI`);
345
+ }
346
+ break;
347
+ case 'union':
348
+ // TODO: https://github.com/Azure/typespec-rust/issues/57
349
+ throw new Error('credential unions NYI');
350
+ }
351
+ break;
352
+ case 'endpoint':
353
+ // for Rust, we always require a complete endpoint param, templated
354
+ // endpoints, e.g. https://{something}.contoso.com isn't supported.
355
+ // note that the types of the param and the field are slightly different
356
+ ctorParams.push(new rust.ClientParameter(param.name, new rust.ImplTrait('AsRef', new rust.StringSlice())));
357
+ rustClient.fields.push(new rust.ClientParameter(param.name, new rust.Url(this.crate)));
358
+ break;
359
+ case 'method': {
360
+ // this is a client param that's used in method bodies (e.g. api-version but can be others)
361
+ if (!param.isApiVersionParam) {
362
+ // TODO: https://github.com/Azure/typespec-rust/issues/90
363
+ throw new Error('client method params other than api-version NYI');
364
+ }
365
+ if (!param.clientDefaultValue) {
366
+ // TODO: https://github.com/Azure/typespec-rust/issues/90
367
+ throw new Error('required client method params NYI');
368
+ }
369
+ // we expose the api-version param as a String
370
+ const paramName = snakeCaseName(param.name);
371
+ rustClient.fields.push(new rust.ClientParameter(paramName, new rust.StringType()));
372
+ // client-side default value makes the param optional
373
+ const apiVersionField = new rust.StructField(paramName, false, new rust.StringType());
374
+ apiVersionField.defaultValue = `String::from("${param.clientDefaultValue}")`;
375
+ clientOptionsStruct.fields.push(apiVersionField);
376
+ break;
377
+ }
378
+ }
379
+ }
380
+ if (authType === AuthTypes.Default || (authType & AuthTypes.NoAuth) === AuthTypes.NoAuth) {
381
+ const ctorWithNoCredential = new rust.Constructor('with_no_credential');
382
+ rustClient.constructable.constructors.push(ctorWithNoCredential);
383
+ }
384
+ // propagate ctor params to all client ctors
385
+ for (const constructor of rustClient.constructable.constructors) {
386
+ constructor.parameters.push(...ctorParams);
387
+ // ensure param order of endpoint, credential, other
388
+ helpers.sortClientParameters(constructor.parameters);
389
+ }
390
+ }
391
+ else if (parent) {
392
+ // this is a sub-client. it will share the fields of the parent.
393
+ // NOTE: we must propagate parant params before a potential recursive call
394
+ // to create a child client that will need to inherit our client params.
395
+ rustClient.fields = parent.fields;
396
+ }
397
+ else {
398
+ throw new Error(`uninstantiable client ${client.name} has no parent`);
399
+ }
400
+ for (const method of client.methods) {
401
+ if (method.kind === 'clientaccessor') {
402
+ const subClient = this.recursiveAdaptClient(method.response, rustClient);
403
+ rustClient.methods.push(new rust.ClientAccessor(`get_${snakeCaseName(subClient.name)}_client`, rustClient, subClient));
404
+ }
405
+ else {
406
+ this.adaptMethod(method, rustClient);
407
+ }
408
+ }
409
+ this.crate.clients.push(rustClient);
410
+ return rustClient;
411
+ }
412
+ // converts method into a rust.Method for the specified rust.Client
413
+ adaptMethod(method, rustClient) {
414
+ let rustMethod;
415
+ const optionsLifetime = new rust.Lifetime('a');
416
+ const methodOptionsStruct = new rust.Struct(`${rustClient.name}${codegen.pascalCase(method.name)}Options`, true);
417
+ methodOptionsStruct.lifetime = optionsLifetime;
418
+ const clientMethodOptions = new rust.ExternalType(this.crate, 'azure_core', 'ClientMethodOptions');
419
+ clientMethodOptions.lifetime = optionsLifetime;
420
+ methodOptionsStruct.fields.push(new rust.StructField('method_options', false, clientMethodOptions));
421
+ const httpMethod = method.operation.verb;
422
+ const httpPath = method.operation.path;
423
+ switch (method.kind) {
424
+ case 'basic':
425
+ rustMethod = new rust.AsyncMethod(naming.getEscapedReservedName(snakeCaseName(method.name), 'fn'), rustClient, isPub(method.access), new rust.MethodOptions(methodOptionsStruct, false), httpMethod, httpPath);
426
+ break;
427
+ case 'paging':
428
+ // TODO: https://github.com/Azure/typespec-rust/issues/60
429
+ return;
430
+ default:
431
+ throw new Error(`method kind ${method.kind} NYI`);
432
+ }
433
+ rustMethod.docs.summary = method.summary;
434
+ rustMethod.docs.description = method.doc;
435
+ rustClient.methods.push(rustMethod);
436
+ // stuff all of the operation parameters into one array for easy traversal
437
+ let allOpParams = new Array();
438
+ allOpParams.push(...method.operation.parameters);
439
+ if (method.operation.bodyParam) {
440
+ allOpParams.push(method.operation.bodyParam);
441
+ }
442
+ for (const param of method.parameters) {
443
+ // we need to translate from the method param to its underlying operation param.
444
+ // most params have a one-to-one mapping. however, for spread params, there will
445
+ // be a many-to-one mapping. i.e. multiple params will map to the same underlying
446
+ // operation param. each param corresponds to a field within the operation param.
447
+ const opParam = values(allOpParams).where((opParam) => {
448
+ return values(opParam.correspondingMethodParams).where((methodParam) => {
449
+ return methodParam.name === param.name;
450
+ }).any();
451
+ }).first();
452
+ if (!opParam) {
453
+ throw new Error(`didn't find operation parameter for method ${method.name} parameter ${param.name}`);
454
+ }
455
+ let adaptedParam;
456
+ if (opParam.kind === 'body' && opParam.type.kind === 'model' && opParam.type.kind !== param.type.kind) {
457
+ throw new Error('spread params NYI');
458
+ }
459
+ else {
460
+ adaptedParam = this.adaptMethodParameter(opParam);
461
+ }
462
+ adaptedParam.docs.summary = param.summary;
463
+ adaptedParam.docs.description = param.doc;
464
+ rustMethod.params.push(adaptedParam);
465
+ // remove the opParam we just processed
466
+ allOpParams = allOpParams.filter((v) => {
467
+ return v !== opParam;
468
+ });
469
+ }
470
+ // client params aren't included in method.parameters so
471
+ // look for them in the remaining operation parameters.
472
+ for (const opParam of allOpParams) {
473
+ if (opParam.onClient) {
474
+ const adaptedParam = this.adaptMethodParameter(opParam);
475
+ adaptedParam.docs.summary = opParam.summary;
476
+ adaptedParam.docs.description = opParam.doc;
477
+ rustMethod.params.push(adaptedParam);
478
+ }
479
+ }
480
+ let returnType;
481
+ if (method.response.type) {
482
+ // search the HTTP responses for the corresponding type so we can determine the wire format
483
+ let format;
484
+ for (const httpResp of method.operation.responses.values()) {
485
+ if (!httpResp.type || !httpResp.defaultContentType || httpResp.type.kind !== method.response.type.kind) {
486
+ continue;
487
+ }
488
+ format = this.adaptSerdeFormat(httpResp.defaultContentType);
489
+ break;
490
+ }
491
+ if (!format) {
492
+ throw new Error(`didn't find HTTP response for kind ${method.response.type.kind} in method ${method.name}`);
493
+ }
494
+ returnType = new rust.Response(this.crate, this.getType(method.response.type), format);
495
+ }
496
+ else {
497
+ returnType = new rust.Response(this.crate, this.getUnitType());
498
+ }
499
+ rustMethod.returns = new rust.Result(this.crate, returnType);
500
+ }
501
+ adaptMethodParameter(param) {
502
+ const paramLoc = param.onClient ? 'client' : 'method';
503
+ // if this is a client method param, check if we've already adapted it
504
+ if (paramLoc === 'client') {
505
+ const clientMethodParam = this.clientMethodParams.get(param.name);
506
+ if (clientMethodParam) {
507
+ return clientMethodParam;
508
+ }
509
+ }
510
+ const paramName = naming.getEscapedReservedName(snakeCaseName(param.name), 'param');
511
+ let paramType = this.getType(param.type);
512
+ if (paramLoc === 'method' && paramType.kind === 'String') {
513
+ // for Strings, we define these as "impl Into<String>" so that passing a str will just work
514
+ paramType = new rust.ImplTrait('Into', paramType);
515
+ }
516
+ let adaptedParam;
517
+ switch (param.kind) {
518
+ case 'body': {
519
+ adaptedParam = new rust.BodyParameter(paramName, paramLoc, new rust.RequestContent(this.crate, paramType, this.adaptSerdeFormat(param.defaultContentType)));
520
+ break;
521
+ }
522
+ case 'header':
523
+ if (param.collectionFormat) {
524
+ if (paramType.kind !== 'vector') {
525
+ throw new Error(`unexpected kind ${paramType.kind} for HeaderCollectionParameter`);
526
+ }
527
+ let format;
528
+ switch (param.collectionFormat) {
529
+ case 'csv':
530
+ case 'simple':
531
+ format = 'csv';
532
+ break;
533
+ case 'pipes':
534
+ case 'ssv':
535
+ case 'tsv':
536
+ format = param.collectionFormat;
537
+ break;
538
+ default:
539
+ throw new Error(`unexpected format ${param.collectionFormat} for HeaderCollectionParameter`);
540
+ }
541
+ adaptedParam = new rust.HeaderCollectionParameter(paramName, param.serializedName, paramLoc, paramType, format);
542
+ }
543
+ else {
544
+ adaptedParam = new rust.HeaderParameter(paramName, param.serializedName, paramLoc, paramType);
545
+ }
546
+ break;
547
+ case 'path':
548
+ adaptedParam = new rust.PathParameter(paramName, param.serializedName, paramLoc, paramType, param.urlEncode);
549
+ break;
550
+ case 'query':
551
+ if (param.collectionFormat) {
552
+ const format = param.collectionFormat === 'simple' ? 'csv' : (param.collectionFormat === 'form' ? 'multi' : param.collectionFormat);
553
+ if (paramType.kind !== 'vector') {
554
+ throw new Error(`unexpected kind ${paramType.kind} for QueryCollectionParameter`);
555
+ }
556
+ // TODO: hard-coded encoding setting, https://github.com/Azure/typespec-azure/issues/1314
557
+ adaptedParam = new rust.QueryCollectionParameter(paramName, param.serializedName, paramLoc, paramType, true, format);
558
+ }
559
+ else {
560
+ // TODO: hard-coded encoding setting, https://github.com/Azure/typespec-azure/issues/1314
561
+ adaptedParam = new rust.QueryParameter(paramName, param.serializedName, paramLoc, paramType, true);
562
+ }
563
+ break;
564
+ }
565
+ adaptedParam.docs.summary = param.summary;
566
+ adaptedParam.docs.description = param.doc;
567
+ if (paramLoc === 'client') {
568
+ this.clientMethodParams.set(param.name, adaptedParam);
569
+ }
570
+ return adaptedParam;
571
+ }
572
+ adaptSerdeFormat(contentType) {
573
+ switch (contentType) {
574
+ case 'application/json':
575
+ this.crate.addDependency(new rust.CrateDependency('serde_json'));
576
+ return 'json';
577
+ default:
578
+ throw new Error(`unhandled contentType ${contentType}`);
579
+ }
580
+ }
581
+ }
582
+ function isPub(access) {
583
+ return access !== 'internal';
584
+ }
585
+ function snakeCaseName(name) {
586
+ return codegen.deconstruct(name).join('_');
587
+ }
588
+ function recursiveKeyName(root, obj) {
589
+ switch (obj.kind) {
590
+ case 'array':
591
+ return recursiveKeyName(`${root}-array`, obj.valueType);
592
+ case 'enum':
593
+ return `${root}-${obj.name}`;
594
+ case 'enumvalue':
595
+ return `${root}-${obj.enumType.name}-${obj.value}`;
596
+ case 'dict':
597
+ return recursiveKeyName(`${root}-dict`, obj.valueType);
598
+ case 'plainDate':
599
+ return `${root}-plainDate`;
600
+ case 'utcDateTime':
601
+ return `${root}-${obj.encode}`;
602
+ case 'duration':
603
+ // TODO: this should be: return `${root}-duration-${obj.encode}`;
604
+ // as it is now, it treats the duration as a String
605
+ // https://github.com/Azure/typespec-rust/issues/41
606
+ return `${root}-${obj.wireType.kind}`;
607
+ case 'model':
608
+ return `${root}-${obj.name}`;
609
+ case 'nullable':
610
+ return recursiveKeyName(root, obj.type);
611
+ case 'plainTime':
612
+ return `${root}-plainTime`;
613
+ default:
614
+ return `${root}-${obj.kind}`;
615
+ }
616
+ }
617
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/tcgcadapter/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import * as rust from '../codemodel/index.js';
2
+ export declare function fixUpEnumValueName(name: string): string;
3
+ export declare function sortClientParameters(params: Array<rust.ClientParameter>): void;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/tcgcadapter/helpers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BvD;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAQ9E"}