@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.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/src/codegen/cargotoml.d.ts +3 -0
- package/dist/src/codegen/cargotoml.d.ts.map +1 -0
- package/dist/src/codegen/cargotoml.js +22 -0
- package/dist/src/codegen/cargotoml.js.map +1 -0
- package/dist/src/codegen/clients.d.ts +7 -0
- package/dist/src/codegen/clients.d.ts.map +1 -0
- package/dist/src/codegen/clients.js +514 -0
- package/dist/src/codegen/clients.js.map +1 -0
- package/dist/src/codegen/codeGenerator.d.ts +14 -0
- package/dist/src/codegen/codeGenerator.d.ts.map +1 -0
- package/dist/src/codegen/codeGenerator.js +46 -0
- package/dist/src/codegen/codeGenerator.js.map +1 -0
- package/dist/src/codegen/context.d.ts +10 -0
- package/dist/src/codegen/context.d.ts.map +1 -0
- package/dist/src/codegen/context.js +75 -0
- package/dist/src/codegen/context.js.map +1 -0
- package/dist/src/codegen/enums.d.ts +4 -0
- package/dist/src/codegen/enums.d.ts.map +1 -0
- package/dist/src/codegen/enums.js +48 -0
- package/dist/src/codegen/enums.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +18 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +133 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/lib.d.ts +3 -0
- package/dist/src/codegen/lib.d.ts.map +1 -0
- package/dist/src/codegen/lib.js +37 -0
- package/dist/src/codegen/lib.js.map +1 -0
- package/dist/src/codegen/mod.d.ts +3 -0
- package/dist/src/codegen/mod.d.ts.map +1 -0
- package/dist/src/codegen/mod.js +20 -0
- package/dist/src/codegen/mod.js.map +1 -0
- package/dist/src/codegen/models.d.ts +4 -0
- package/dist/src/codegen/models.d.ts.map +1 -0
- package/dist/src/codegen/models.js +45 -0
- package/dist/src/codegen/models.js.map +1 -0
- package/dist/src/codegen/use.d.ts +11 -0
- package/dist/src/codegen/use.d.ts.map +1 -0
- package/dist/src/codegen/use.js +105 -0
- package/dist/src/codegen/use.js.map +1 -0
- package/dist/src/codemodel/client.d.ts +137 -0
- package/dist/src/codemodel/client.d.ts.map +1 -0
- package/dist/src/codemodel/client.js +146 -0
- package/dist/src/codemodel/client.js.map +1 -0
- package/dist/src/codemodel/crate.d.ts +24 -0
- package/dist/src/codemodel/crate.d.ts.map +1 -0
- package/dist/src/codemodel/crate.js +53 -0
- package/dist/src/codemodel/crate.js.map +1 -0
- package/dist/src/codemodel/index.d.ts +5 -0
- package/dist/src/codemodel/index.d.ts.map +1 -0
- package/dist/src/codemodel/index.js +9 -0
- package/dist/src/codemodel/index.js.map +1 -0
- package/dist/src/codemodel/method.d.ts +32 -0
- package/dist/src/codemodel/method.d.ts.map +1 -0
- package/dist/src/codemodel/method.js +33 -0
- package/dist/src/codemodel/method.js.map +1 -0
- package/dist/src/codemodel/types.d.ts +224 -0
- package/dist/src/codemodel/types.d.ts.map +1 -0
- package/dist/src/codemodel/types.js +248 -0
- package/dist/src/codemodel/types.js.map +1 -0
- package/dist/src/emitter.d.ts +5 -0
- package/dist/src/emitter.d.ts.map +1 -0
- package/dist/src/emitter.js +45 -0
- package/dist/src/emitter.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib.d.ts +13 -0
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/src/lib.js +24 -0
- package/dist/src/lib.js.map +1 -0
- package/dist/src/tcgcadapter/adapter.d.ts +25 -0
- package/dist/src/tcgcadapter/adapter.d.ts.map +1 -0
- package/dist/src/tcgcadapter/adapter.js +617 -0
- package/dist/src/tcgcadapter/adapter.js.map +1 -0
- package/dist/src/tcgcadapter/helpers.d.ts +4 -0
- package/dist/src/tcgcadapter/helpers.d.ts.map +1 -0
- package/dist/src/tcgcadapter/helpers.js +45 -0
- package/dist/src/tcgcadapter/helpers.js.map +1 -0
- package/dist/src/tcgcadapter/naming.d.ts +2 -0
- package/dist/src/tcgcadapter/naming.d.ts.map +1 -0
- package/dist/src/tcgcadapter/naming.js +27 -0
- package/dist/src/tcgcadapter/naming.js.map +1 -0
- 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 @@
|
|
|
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"}
|