@azure-tools/typespec-rust 0.1.0 → 0.3.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 (75) hide show
  1. package/dist/src/codegen/cargotoml.d.ts +6 -0
  2. package/dist/src/codegen/cargotoml.d.ts.map +1 -1
  3. package/dist/src/codegen/cargotoml.js +6 -1
  4. package/dist/src/codegen/cargotoml.js.map +1 -1
  5. package/dist/src/codegen/clients.d.ts +19 -2
  6. package/dist/src/codegen/clients.d.ts.map +1 -1
  7. package/dist/src/codegen/clients.js +489 -250
  8. package/dist/src/codegen/clients.js.map +1 -1
  9. package/dist/src/codegen/codeGenerator.d.ts +29 -6
  10. package/dist/src/codegen/codeGenerator.d.ts.map +1 -1
  11. package/dist/src/codegen/codeGenerator.js +64 -25
  12. package/dist/src/codegen/codeGenerator.js.map +1 -1
  13. package/dist/src/codegen/context.d.ts +41 -0
  14. package/dist/src/codegen/context.d.ts.map +1 -1
  15. package/dist/src/codegen/context.js +94 -15
  16. package/dist/src/codegen/context.js.map +1 -1
  17. package/dist/src/codegen/enums.d.ts +9 -1
  18. package/dist/src/codegen/enums.d.ts.map +1 -1
  19. package/dist/src/codegen/enums.js +34 -20
  20. package/dist/src/codegen/enums.js.map +1 -1
  21. package/dist/src/codegen/helpers.d.ts +116 -2
  22. package/dist/src/codegen/helpers.d.ts.map +1 -1
  23. package/dist/src/codegen/helpers.js +148 -18
  24. package/dist/src/codegen/helpers.js.map +1 -1
  25. package/dist/src/codegen/lib.d.ts +7 -1
  26. package/dist/src/codegen/lib.d.ts.map +1 -1
  27. package/dist/src/codegen/lib.js +10 -5
  28. package/dist/src/codegen/lib.js.map +1 -1
  29. package/dist/src/codegen/mod.d.ts +6 -1
  30. package/dist/src/codegen/mod.d.ts.map +1 -1
  31. package/dist/src/codegen/mod.js +9 -10
  32. package/dist/src/codegen/mod.js.map +1 -1
  33. package/dist/src/codegen/models.d.ts +20 -1
  34. package/dist/src/codegen/models.d.ts.map +1 -1
  35. package/dist/src/codegen/models.js +250 -13
  36. package/dist/src/codegen/models.js.map +1 -1
  37. package/dist/src/codegen/use.d.ts +32 -0
  38. package/dist/src/codegen/use.d.ts.map +1 -1
  39. package/dist/src/codegen/use.js +42 -15
  40. package/dist/src/codegen/use.js.map +1 -1
  41. package/dist/src/codemodel/client.d.ts +150 -11
  42. package/dist/src/codemodel/client.d.ts.map +1 -1
  43. package/dist/src/codemodel/client.js +60 -17
  44. package/dist/src/codemodel/client.js.map +1 -1
  45. package/dist/src/codemodel/crate.d.ts +33 -0
  46. package/dist/src/codemodel/crate.d.ts.map +1 -1
  47. package/dist/src/codemodel/crate.js +17 -0
  48. package/dist/src/codemodel/crate.js.map +1 -1
  49. package/dist/src/codemodel/method.d.ts +17 -0
  50. package/dist/src/codemodel/method.d.ts.map +1 -1
  51. package/dist/src/codemodel/types.d.ts +152 -24
  52. package/dist/src/codemodel/types.d.ts.map +1 -1
  53. package/dist/src/codemodel/types.js +39 -25
  54. package/dist/src/codemodel/types.js.map +1 -1
  55. package/dist/src/emitter.d.ts +5 -0
  56. package/dist/src/emitter.d.ts.map +1 -1
  57. package/dist/src/emitter.js +36 -23
  58. package/dist/src/emitter.js.map +1 -1
  59. package/dist/src/lib.d.ts +2 -0
  60. package/dist/src/lib.d.ts.map +1 -1
  61. package/dist/src/lib.js +6 -1
  62. package/dist/src/lib.js.map +1 -1
  63. package/dist/src/tcgcadapter/adapter.d.ts +73 -1
  64. package/dist/src/tcgcadapter/adapter.d.ts.map +1 -1
  65. package/dist/src/tcgcadapter/adapter.js +342 -81
  66. package/dist/src/tcgcadapter/adapter.js.map +1 -1
  67. package/dist/src/tcgcadapter/helpers.d.ts +18 -0
  68. package/dist/src/tcgcadapter/helpers.d.ts.map +1 -1
  69. package/dist/src/tcgcadapter/helpers.js +23 -2
  70. package/dist/src/tcgcadapter/helpers.js.map +1 -1
  71. package/dist/src/tcgcadapter/naming.d.ts +8 -0
  72. package/dist/src/tcgcadapter/naming.d.ts.map +1 -1
  73. package/dist/src/tcgcadapter/naming.js +8 -5
  74. package/dist/src/tcgcadapter/naming.js.map +1 -1
  75. package/package.json +21 -23
@@ -4,40 +4,277 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import * as helpers from './helpers.js';
6
6
  import { Use } from './use.js';
7
- // emits the models.rs file for this crate
7
+ /**
8
+ * returns the emitted model types, or empty if the
9
+ * crate contains no model types.
10
+ *
11
+ * @param crate the crate for which to emit models
12
+ * @param context the context for the provided crate
13
+ * @returns the model content or empty
14
+ */
8
15
  export function emitModels(crate, context) {
9
16
  if (crate.models.length === 0) {
10
- return '';
17
+ return {};
11
18
  }
12
- const use = new Use('models');
19
+ return {
20
+ public: emitModelsInternal(crate, context, true),
21
+ serde: emitModelsSerde(crate, context),
22
+ internal: emitModelsInternal(crate, context, false),
23
+ xmlHelpers: emitXMLListWrappers(),
24
+ };
25
+ }
26
+ /**
27
+ * the implementation of emitModels
28
+ *
29
+ * @param crate the crate for which to emit models
30
+ * @param context the context for the provided crate
31
+ * @param pub true if we want public models, false for internal models
32
+ * @returns the model content or empty
33
+ */
34
+ function emitModelsInternal(crate, context, pub) {
35
+ // for the internal models we might need to use public model types
36
+ const use = new Use(pub ? 'models' : undefined);
13
37
  use.addTypes('serde', ['Deserialize', 'Serialize']);
14
- const indentation = new helpers.indentation();
38
+ use.addType('azure_core', 'Model');
39
+ const indent = new helpers.indentation();
15
40
  let body = '';
16
41
  for (const model of crate.models) {
42
+ if (model.internal === pub) {
43
+ continue;
44
+ }
17
45
  body += helpers.formatDocComment(model.docs);
18
- body += helpers.annotationDerive('Default');
46
+ body += helpers.annotationDerive('Default', 'Model');
19
47
  body += helpers.AnnotationNonExhaustive;
20
- body += `${helpers.emitPub(model.pub)}struct ${model.name} {\n`;
48
+ if (model.xmlName) {
49
+ body += `#[serde(rename = "${model.xmlName}")]\n`;
50
+ }
51
+ body += `pub struct ${model.name} {\n`;
21
52
  for (const field of model.fields) {
22
53
  use.addForType(field.type);
23
54
  body += helpers.formatDocComment(field.docs);
24
- if (field.name !== field.serde) {
25
- // only emit the serde annotation when the names aren't equal
26
- body += `${indentation.get()}#[serde(rename = "${field.serde}")]\n`;
55
+ const serdeParams = new Array();
56
+ const fieldRename = getSerDeRename(field);
57
+ if (fieldRename) {
58
+ serdeParams.push(`rename = "${fieldRename}"`);
59
+ }
60
+ // NOTE: usage of serde annotations like this means that base64 encoded bytes and
61
+ // XML wrapped lists are mutually exclusive. it's not a real scenario at present.
62
+ if (helpers.unwrapOption(field.type).kind === 'encodedBytes') {
63
+ // TODO: https://github.com/Azure/typespec-rust/issues/56
64
+ // specifically need to handle nested arrays of base64 encoded bytes
65
+ let format = '';
66
+ if (helpers.unwrapOption(field.type).encoding === 'url') {
67
+ format = '_url_safe';
68
+ }
69
+ serdeParams.push(`deserialize_with = "base64::deserialize${format}"`);
70
+ serdeParams.push(`serialize_with = "base64::serialize${format}"`);
71
+ use.addType('azure_core', 'base64');
72
+ }
73
+ else if (context.getModelBodyFormat(model) === 'xml' && helpers.unwrapOption(field.type).kind === 'vector' && field.xmlKind !== 'unwrappedList') {
74
+ // this is a wrapped list so we need a helper type for serde
75
+ const xmlListWrapper = getXMLListWrapper(field);
76
+ serdeParams.push(`deserialize_with = "${xmlListWrapper.name}::unwrap"`);
77
+ serdeParams.push(`serialize_with = "${xmlListWrapper.name}::wrap"`);
78
+ use.addType('crate', `generated::xml_helpers::${xmlListWrapper.name}`);
27
79
  }
28
80
  // TODO: omit skip_serializing_if if we need to send explicit JSON null
29
81
  // https://github.com/Azure/typespec-rust/issues/78
30
- body += `${indentation.get()}#[serde(skip_serializing_if = "Option::is_none")]\n`;
31
- body += `${indentation.get()}${helpers.emitPub(field.pub)}${field.name}: ${helpers.getTypeDeclaration(field.type)},\n\n`;
82
+ if (field.type.kind === 'option') {
83
+ serdeParams.push('skip_serializing_if = "Option::is_none"');
84
+ }
85
+ if (serdeParams.length > 0) {
86
+ body += `${indent.get()}#[serde(${serdeParams.join(', ')})]\n`;
87
+ }
88
+ body += `${indent.get()}${helpers.emitPub(field.pub)}${field.name}: ${helpers.getTypeDeclaration(field.type)},\n\n`;
32
89
  }
33
90
  body += '}\n\n';
34
91
  }
92
+ if (body === '') {
93
+ // no models for this value of pub
94
+ return undefined;
95
+ }
96
+ // emit TryFrom as required for internal models only.
97
+ // public models will have their helpers in a separate file.
98
+ if (!pub) {
99
+ for (const model of crate.models) {
100
+ if (!model.internal) {
101
+ continue;
102
+ }
103
+ body += context.getTryFromForRequestContent(model, use);
104
+ body += context.getTryFromResponseForType(model, use);
105
+ }
106
+ }
107
+ let content = helpers.contentPreamble();
108
+ content += use.text();
109
+ content += body;
110
+ return content;
111
+ }
112
+ /**
113
+ * returns serde helpers for public models.
114
+ * if no helpers are required, undefined is returned.
115
+ *
116
+ * @param crate the crate for which to emit model serde helpers
117
+ * @param context the context for the provided crate
118
+ * @returns the model serde helpers content or undefined
119
+ */
120
+ function emitModelsSerde(crate, context) {
121
+ const use = new Use();
122
+ let body = '';
35
123
  // emit TryFrom as required
36
124
  for (const model of crate.models) {
37
- body += context.getTryFromForRequestContent(model, use);
38
- body += context.getTryFromResponseForType(model, use);
125
+ if (model.internal) {
126
+ // skip internal models as their serde helpers are in the same file
127
+ continue;
128
+ }
129
+ const forReq = context.getTryFromForRequestContent(model, use);
130
+ const forRes = context.getTryFromResponseForType(model, use);
131
+ // helpers aren't required for all types, so only
132
+ // add a use statement for a type if it has a helper
133
+ if (forReq.length > 0 || forRes.length > 0) {
134
+ use.addForType(model);
135
+ }
136
+ body += forReq;
137
+ body += forRes;
138
+ }
139
+ if (body.length === 0) {
140
+ // no helpers
141
+ return undefined;
142
+ }
143
+ let content = helpers.contentPreamble();
144
+ content += use.text();
145
+ content += body;
146
+ return content;
147
+ }
148
+ /**
149
+ * returns the value for the rename option in a serde derive macro
150
+ * or undefined if no rename is required.
151
+ *
152
+ * @param field the field for which to emit a rename
153
+ * @returns the value for the rename option or undefined
154
+ */
155
+ function getSerDeRename(field) {
156
+ if (field.name === field.serde && field.xmlKind !== 'attribute' && field.xmlKind !== 'text') {
157
+ return undefined;
158
+ }
159
+ else if (field.xmlKind === 'text') {
160
+ return '$text';
161
+ }
162
+ // build the potential attribute and renamed field
163
+ let fieldName = field.name === field.serde ? field.name : field.serde;
164
+ if (field.xmlKind === 'attribute') {
165
+ fieldName = '@' + fieldName;
166
+ }
167
+ return fieldName;
168
+ }
169
+ class XMLListWrapper {
170
+ constructor(name, fieldName, fieldType) {
171
+ this.name = name;
172
+ this.fieldName = fieldName;
173
+ this.fieldType = fieldType;
174
+ }
175
+ }
176
+ // used by getXMLListWrapper and emitXMLListWrappers
177
+ const xmlListWrappers = new Map();
178
+ /**
179
+ * gets or creates an XMLListWrapper for the specified model field.
180
+ * assumes that it's been determined that the wrapper is required.
181
+ *
182
+ * @param field the field for which to create an XMLWrapper
183
+ * @returns the XMLListWrapper for the provided field
184
+ */
185
+ function getXMLListWrapper(field) {
186
+ // for wrapped lists of scalar types, the element names for
187
+ // scalar types use the TypeSpec defined names. so, we need
188
+ // to translate from Rust scalar types back to TypeSpec.
189
+ let unwrappedFieldTypeName;
190
+ const wrappedType = helpers.unwrapType(field.type);
191
+ switch (wrappedType.kind) {
192
+ case 'String':
193
+ unwrappedFieldTypeName = 'string';
194
+ break;
195
+ case 'scalar':
196
+ switch (wrappedType.type) {
197
+ case 'bool':
198
+ unwrappedFieldTypeName = 'boolean';
199
+ break;
200
+ case 'f32':
201
+ unwrappedFieldTypeName = 'float32';
202
+ break;
203
+ case 'f64':
204
+ unwrappedFieldTypeName = 'float64';
205
+ break;
206
+ case 'i16':
207
+ unwrappedFieldTypeName = 'int16';
208
+ break;
209
+ case 'i32':
210
+ unwrappedFieldTypeName = 'int32';
211
+ break;
212
+ case 'i64':
213
+ unwrappedFieldTypeName = 'int64';
214
+ break;
215
+ case 'i8':
216
+ unwrappedFieldTypeName = 'int8';
217
+ break;
218
+ }
219
+ break;
220
+ default:
221
+ unwrappedFieldTypeName = helpers.getTypeDeclaration(wrappedType);
222
+ }
223
+ // the wrapper type name is a combination of the field name and the
224
+ // unwrapped type name of T. this is to ensure unique type names
225
+ const wrapperTypeName = `${helpers.capitalize(field.name)}${helpers.capitalize(unwrappedFieldTypeName)}`;
226
+ let xmlListWrapper = xmlListWrappers.get(wrapperTypeName);
227
+ if (!xmlListWrapper) {
228
+ xmlListWrapper = new XMLListWrapper(wrapperTypeName, unwrappedFieldTypeName, field.type);
229
+ xmlListWrapper.serde = wrapperTypeName === field.serde ? undefined : field.serde;
230
+ xmlListWrappers.set(wrapperTypeName, xmlListWrapper);
231
+ }
232
+ return xmlListWrapper;
233
+ }
234
+ /**
235
+ * emits helper types for XML lists or returns undefined
236
+ * if no XMLListWrappers are required.
237
+ *
238
+ * @returns the helper models for wrapped XML lists or undefined
239
+ */
240
+ function emitXMLListWrappers() {
241
+ if (xmlListWrappers.size === 0) {
242
+ return undefined;
243
+ }
244
+ const wrapperTypes = Array.from(xmlListWrappers.values());
245
+ wrapperTypes.sort((a, b) => { return helpers.sortAscending(a.name, b.name); });
246
+ const indent = new helpers.indentation();
247
+ const use = new Use();
248
+ use.addTypes('serde', ['Deserialize', 'Deserializer', 'Serialize', 'Serializer']);
249
+ let body = '';
250
+ for (const wrapperType of wrapperTypes) {
251
+ body += '#[derive(Deserialize, Serialize)]\n';
252
+ if (wrapperType.serde) {
253
+ body += `#[serde(rename = "${wrapperType.serde}")]\n`;
254
+ }
255
+ use.addForType(wrapperType.fieldType);
256
+ const fieldType = helpers.getTypeDeclaration(wrapperType.fieldType);
257
+ body += `pub struct ${wrapperType.name} {\n`;
258
+ body += `${indent.get()}#[serde(default)]\n`;
259
+ body += `${indent.get()}${wrapperType.fieldName}: ${fieldType},\n`;
260
+ body += '}\n\n';
261
+ body += `impl ${wrapperType.name} {\n`;
262
+ body += `${indent.get()}pub fn unwrap<'de, D>(deserializer: D) -> Result<${fieldType}, D::Error> where D: Deserializer<'de> {\n`;
263
+ body += `${indent.push().get()}Ok(${wrapperType.name}::deserialize(deserializer)?.${wrapperType.fieldName})\n`;
264
+ body += `${indent.pop().get()}}\n\n`;
265
+ const fieldTypeParam = 'to_serialize';
266
+ body += `${indent.get()}pub fn wrap<S>(${fieldTypeParam}: &${fieldType}, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {\n`;
267
+ body += `${indent.push().get()}${wrapperType.name} {\n`;
268
+ body += `${indent.push().get()}${wrapperType.fieldName}: ${fieldTypeParam}.to_owned(),\n`;
269
+ body += `${indent.pop().get()}}\n`;
270
+ body += `${indent.get()}.serialize(serializer)\n`;
271
+ body += `${indent.pop().get()}}\n`;
272
+ body += '}\n\n'; // end impl
39
273
  }
40
274
  let content = helpers.contentPreamble();
275
+ // these types aren't publicly available and their fields need to
276
+ // align with the XML names, so they might not always be camel/snake cased.
277
+ content += '#![allow(non_camel_case_types)]\n#![allow(non_snake_case)]\n\n';
41
278
  content += use.text();
42
279
  content += body;
43
280
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/codegen/models.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAG/F,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,0CAA0C;AAC1C,MAAM,UAAU,UAAU,CAAC,KAAiB,EAAE,OAAgB;IAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,EAAE,CAAC;KACX;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QAChC,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;QACxC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,CAAC;QAEhE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE;gBAC9B,6DAA6D;gBAC7D,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,qBAAqB,KAAK,CAAC,KAAK,OAAO,CAAC;aACrE;YAED,uEAAuE;YACvE,mDAAmD;YACnD,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,qDAAqD,CAAC;YAClF,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SAC1H;QAED,IAAI,IAAI,OAAO,CAAC;KACjB;IAED,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QAChC,IAAI,IAAI,OAAO,CAAC,2BAA2B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACvD;IAED,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;IAEhB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/codegen/models.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,43 @@
1
1
  import * as rust from '../codemodel/index.js';
2
+ /** used to generate use statements */
2
3
  export declare class Use {
3
4
  private uses;
4
5
  private scope?;
6
+ /**
7
+ * instantiates a new instance of the Use type
8
+ *
9
+ * @param scope indicates a scope in which use statements are constructed.
10
+ * e.g. 'models' indicates we're "in" the crate::models scope so there's
11
+ * no need to add a use statement for types in crate::models
12
+ * no scope will add all using statements as required.
13
+ */
5
14
  constructor(scope?: 'models');
15
+ /**
16
+ * adds the specified module and type if not already in the list
17
+ * e.g. ('azure_core', 'Context') or ('crate::models', 'FooType')
18
+ *
19
+ * @param module a module name
20
+ * @param type a type within the provided module
21
+ */
6
22
  addType(module: string, type: string): void;
23
+ /**
24
+ * adds the specified module and types if not already in the list
25
+ *
26
+ * @param module a module name
27
+ * @param types one or more types within the provided module
28
+ */
7
29
  addTypes(module: string, types: Array<string>): void;
30
+ /**
31
+ * adds the specified type if not already in the list
32
+ *
33
+ * @param type the Rust type to add
34
+ */
8
35
  addForType(type: rust.Client | rust.Type): void;
36
+ /**
37
+ * emits Rust use statements for the contents of this Use object
38
+ *
39
+ * @returns returns Rust formatted use statements
40
+ */
9
41
  text(): string;
10
42
  }
11
43
  //# sourceMappingURL=use.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/codegen/use.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,qBAAa,GAAG;IACd,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAW;gBAMb,KAAK,CAAC,EAAE,QAAQ;IAO5B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAe3C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAUpD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;IAyC/C,IAAI,IAAI,MAAM;CAyBf"}
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/codegen/use.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C,sCAAsC;AACtC,qBAAa,GAAG;IACd,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAW;IAEzB;;;;;;;OAOG;gBACS,KAAK,CAAC,EAAE,QAAQ;IAK5B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAc3C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IASpD;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;IA6C/C;;;;OAIG;IACH,IAAI,IAAI,MAAM;CAyBf"}
@@ -4,20 +4,29 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import * as codegen from '@azure-tools/codegen';
6
6
  import * as helpers from './helpers.js';
7
- // used to generate use statements
7
+ /** used to generate use statements */
8
8
  export class Use {
9
- // scope indicates a scope in which use statements are constructed.
10
- // e.g. 'models' indicates we're "in" the crate::models scope so there's
11
- // no need to add a use statement for types in crate::models
12
- // no scope will add all using statements as required.
9
+ /**
10
+ * instantiates a new instance of the Use type
11
+ *
12
+ * @param scope indicates a scope in which use statements are constructed.
13
+ * e.g. 'models' indicates we're "in" the crate::models scope so there's
14
+ * no need to add a use statement for types in crate::models
15
+ * no scope will add all using statements as required.
16
+ */
13
17
  constructor(scope) {
14
18
  this.uses = new Array();
15
19
  this.scope = scope;
16
20
  }
17
- // adds the specified module and type if not already in the list
18
- // e.g. ('azure_core', 'Context') or ('crate::models', 'FooType')
21
+ /**
22
+ * adds the specified module and type if not already in the list
23
+ * e.g. ('azure_core', 'Context') or ('crate::models', 'FooType')
24
+ *
25
+ * @param module a module name
26
+ * @param type a type within the provided module
27
+ */
19
28
  addType(module, type) {
20
- let mod = this.uses.find((v, i, o) => { return v.module === module; });
29
+ let mod = this.uses.find((v) => { return v.module === module; });
21
30
  if (!mod) {
22
31
  mod = {
23
32
  module: module,
@@ -25,11 +34,16 @@ export class Use {
25
34
  };
26
35
  this.uses.push(mod);
27
36
  }
28
- if (!mod.types.find((v, i, o) => { return v === type; })) {
37
+ if (!mod.types.find((v) => { return v === type; })) {
29
38
  mod.types.push(type);
30
39
  }
31
40
  }
32
- // adds the specified module and types if not already in the list
41
+ /**
42
+ * adds the specified module and types if not already in the list
43
+ *
44
+ * @param module a module name
45
+ * @param types one or more types within the provided module
46
+ */
33
47
  addTypes(module, types) {
34
48
  if (types.length === 0) {
35
49
  throw new Error('types can\'t be empty');
@@ -38,10 +52,15 @@ export class Use {
38
52
  this.addType(module, type);
39
53
  }
40
54
  }
41
- // adds the specified type if not already in the list
55
+ /**
56
+ * adds the specified type if not already in the list
57
+ *
58
+ * @param type the Rust type to add
59
+ */
42
60
  addForType(type) {
43
61
  switch (type.kind) {
44
62
  case 'arc':
63
+ this.addType('std::sync', 'Arc');
45
64
  return this.addForType(type.type);
46
65
  case 'client': {
47
66
  const mod = codegen.deconstruct(type.name).join('_');
@@ -53,7 +72,11 @@ export class Use {
53
72
  break;
54
73
  case 'model':
55
74
  if (this.scope !== 'models') {
56
- this.addType('crate::models', type.name);
75
+ let module = 'crate::models';
76
+ if (type.internal) {
77
+ module = 'super::internal_models';
78
+ }
79
+ this.addType(module, type.name);
57
80
  }
58
81
  break;
59
82
  case 'option':
@@ -78,13 +101,17 @@ export class Use {
78
101
  }
79
102
  }
80
103
  }
81
- // returns Rust formatted use statements
104
+ /**
105
+ * emits Rust use statements for the contents of this Use object
106
+ *
107
+ * @returns returns Rust formatted use statements
108
+ */
82
109
  text() {
83
110
  if (this.uses.length === 0) {
84
111
  return '';
85
112
  }
86
113
  let content = '';
87
- const indentation = new helpers.indentation();
114
+ const indent = new helpers.indentation();
88
115
  // sort by module name, then sort types if more than one type
89
116
  const sortedMods = this.uses.sort((a, b) => { return helpers.sortAscending(a.module, b.module); });
90
117
  for (const sortedMod of sortedMods) {
@@ -94,7 +121,7 @@ export class Use {
94
121
  else {
95
122
  const sortedTypes = sortedMod.types.sort((a, b) => { return helpers.sortAscending(a, b); });
96
123
  content += `use ${sortedMod.module}::{\n`;
97
- content += `${indentation.get()}${sortedTypes.join(', ')}`;
124
+ content += `${indent.get()}${sortedTypes.join(', ')}`;
98
125
  content += ',\n};\n';
99
126
  }
100
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/codegen/use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/codegen/use.ts"],"names":[],"mappings":"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"}