@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,14 @@
1
+ import { ClientFiles } from './clients.js';
2
+ import * as rust from '../codemodel/index.js';
3
+ export declare class CodeGenerator {
4
+ private readonly context;
5
+ private readonly crate;
6
+ constructor(crate: rust.Crate);
7
+ emitCargoToml(): string;
8
+ emitClients(): Array<ClientFiles>;
9
+ emitEnums(): string;
10
+ emitLib(): string;
11
+ emitMod(): string;
12
+ emitModels(): string;
13
+ }
14
+ //# sourceMappingURL=codeGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeGenerator.d.ts","sourceRoot":"","sources":["../../../src/codegen/codeGenerator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAOxD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,KAAK,EAAE,IAAI,CAAC,KAAK;IAM7B,aAAa,IAAI,MAAM;IAMvB,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC;IAMjC,SAAS,IAAI,MAAM;IAKnB,OAAO,IAAI,MAAM;IAKjB,OAAO,IAAI,MAAM;IAMjB,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,46 @@
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 { emitCargoToml } from './cargotoml.js';
6
+ import { emitClients } from './clients.js';
7
+ import { Context } from './context.js';
8
+ import { emitEnums } from './enums.js';
9
+ import { emitLib } from './lib.js';
10
+ import { emitMod } from './mod.js';
11
+ import { emitModels } from './models.js';
12
+ // CodeGenerator exposes the APIs for obtaining generated code content.
13
+ export class CodeGenerator {
14
+ constructor(crate) {
15
+ this.context = new Context(crate);
16
+ this.crate = crate;
17
+ }
18
+ // returns the contents for the Cargo.toml file
19
+ emitCargoToml() {
20
+ return emitCargoToml(this.crate);
21
+ }
22
+ // returns an array of all client files and their content.
23
+ // if there are no clients, the array will be empty.
24
+ emitClients() {
25
+ return emitClients(this.crate);
26
+ }
27
+ // returns the content for enums.rs
28
+ // if there are no enums, the empty string is returned.
29
+ emitEnums() {
30
+ return emitEnums(this.crate, this.context);
31
+ }
32
+ // returns the content for lib.rs
33
+ emitLib() {
34
+ return emitLib(this.crate);
35
+ }
36
+ // returns the content for mod.rs
37
+ emitMod() {
38
+ return emitMod(this.crate);
39
+ }
40
+ // returns the content for models.rs
41
+ // if there are no models, the empty string is returned.
42
+ emitModels() {
43
+ return emitModels(this.crate, this.context);
44
+ }
45
+ }
46
+ //# sourceMappingURL=codeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeGenerator.js","sourceRoot":"","sources":["../../../src/codegen/codeGenerator.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAe,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,uEAAuE;AACvE,MAAM,OAAO,aAAa;IAIxB,YAAY,KAAiB;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,+CAA+C;IAC/C,aAAa;QACX,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,0DAA0D;IAC1D,oDAAoD;IACpD,WAAW;QACT,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,mCAAmC;IACnC,uDAAuD;IACvD,SAAS;QACP,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,iCAAiC;IACjC,OAAO;QACL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,iCAAiC;IACjC,OAAO;QACL,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,oCAAoC;IACpC,wDAAwD;IACxD,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { Use } from './use.js';
2
+ import * as rust from '../codemodel/index.js';
3
+ export declare class Context {
4
+ private readonly tryFromForRequestTypes;
5
+ private readonly tryFromResponseTypes;
6
+ constructor(crate: rust.Crate);
7
+ getTryFromForRequestContent(type: rust.Type, use: Use): string;
8
+ getTryFromResponseForType(type: rust.Type, use: Use): string;
9
+ }
10
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/codegen/context.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAK9C,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAuC;IAC9E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuC;gBAEhE,KAAK,EAAE,IAAI,CAAC,KAAK;IA+B7B,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM;IAoB9D,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM;CAoB7D"}
@@ -0,0 +1,75 @@
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 helpers from './helpers.js';
6
+ // Context contains contextual information about how types are used.
7
+ // It's an implementation detail of CodeGenerator and isn't intended
8
+ // for use outside of that class.
9
+ export class Context {
10
+ constructor(crate) {
11
+ this.tryFromForRequestTypes = new Map();
12
+ this.tryFromResponseTypes = new Map();
13
+ // enumerate all client methods, looking for enum and model
14
+ // params/responses and their wire format (JSON/XML etc).
15
+ for (const client of crate.clients) {
16
+ for (const method of client.methods) {
17
+ if (method.kind === 'clientaccessor') {
18
+ continue;
19
+ }
20
+ // TODO: this doesn't handle the case where a method sends/receives a HashMap<T>
21
+ // or Vec<T> where T is an enum or model type.
22
+ // https://github.com/Azure/typespec-rust/issues/65
23
+ for (const param of method.params) {
24
+ if (param.kind === 'body' && (param.type.type.kind === 'enum' || param.type.type.kind === 'model')) {
25
+ this.tryFromForRequestTypes.set(helpers.getTypeDeclaration(param.type.type), param.type.format);
26
+ }
27
+ }
28
+ if (method.returns.type.kind === 'response' && (method.returns.type.type.kind === 'enum' || method.returns.type.type.kind === 'model')) {
29
+ if (!method.returns.type.format) {
30
+ throw new Error(`method ${client.name}.${method.name} returns a body but no format was specified`);
31
+ }
32
+ this.tryFromResponseTypes.set(helpers.getTypeDeclaration(method.returns.type.type), method.returns.type.format);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ // returns the TryFrom<T> for RequestContent<T> where T is type.
38
+ // if no impl is required, it returns the empty string.
39
+ getTryFromForRequestContent(type, use) {
40
+ const format = this.tryFromForRequestTypes.get(helpers.getTypeDeclaration(type));
41
+ if (!format) {
42
+ return '';
43
+ }
44
+ use.addType('azure_core', 'RequestContent');
45
+ const indent = new helpers.indentation();
46
+ let content = `impl TryFrom<${helpers.getTypeDeclaration(type)}> for RequestContent<${helpers.getTypeDeclaration(type)}> {\n`;
47
+ content += `${indent.get()}type Error = azure_core::Error;\n`;
48
+ content += `${indent.get()}fn try_from(value: ${helpers.getTypeDeclaration(type)}) -> Result<Self, Self::Error> {\n`;
49
+ content += `${indent.push().get()}Ok(RequestContent::from(serde_${format}::to_vec(&value)?))\n`;
50
+ content += `${indent.pop().get()}}\n`;
51
+ content += '}\n\n';
52
+ return content;
53
+ }
54
+ // returns the TryFrom<Response<T>> for T where T is type.
55
+ // if no impl is required, it returns the empty string.
56
+ getTryFromResponseForType(type, use) {
57
+ const format = this.tryFromResponseTypes.get(helpers.getTypeDeclaration(type));
58
+ if (!format) {
59
+ return '';
60
+ }
61
+ use.addType('azure_core', 'Response');
62
+ use.addType('async_std::task', 'block_on');
63
+ const indent = new helpers.indentation();
64
+ let content = `impl TryFrom<Response<${helpers.getTypeDeclaration(type)}>> for ${helpers.getTypeDeclaration(type)} {\n`;
65
+ content += `${indent.get()}type Error = azure_core::Error;\n`;
66
+ content += `${indent.get()}fn try_from(value: Response<${helpers.getTypeDeclaration(type)}>) -> Result<Self, Self::Error> {\n`;
67
+ content += `${indent.push().get()}let f = || value.into_body().${format}::<${helpers.getTypeDeclaration(type)}>();\n`;
68
+ content += `${indent.get()}let r = block_on(f())?;\n`;
69
+ content += `${indent.get()}Ok(r)\n`;
70
+ content += `${indent.pop().get()}}\n`;
71
+ content += '}\n\n';
72
+ return content;
73
+ }
74
+ }
75
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/codegen/context.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAIxC,oEAAoE;AACpE,oEAAoE;AACpE,iCAAiC;AACjC,MAAM,OAAO,OAAO;IAIlB,YAAY,KAAiB;QAHZ,2BAAsB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAC7D,yBAAoB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAG1E,2DAA2D;QAC3D,yDAAyD;QACzD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;gBACnC,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE;oBACpC,SAAS;iBACV;gBAED,gFAAgF;gBAChF,8CAA8C;gBAC9C,mDAAmD;gBAEnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;wBAClG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACjG;iBACF;gBAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;oBACtI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;wBAC/B,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,6CAA6C,CAAC,CAAC;qBACpG;oBACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACjH;aACF;SACF;IACH,CAAC;IAED,gEAAgE;IAChE,uDAAuD;IACvD,2BAA2B,CAAC,IAAe,EAAE,GAAQ;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,CAAC;SACX;QAED,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,gBAAgB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9H,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,mCAAmC,CAAC;QAC9D,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,sBAAsB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,oCAAoC,CAAC;QACrH,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,iCAAiC,MAAM,uBAAuB,CAAC;QAChG,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;QACtC,OAAO,IAAI,OAAO,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0DAA0D;IAC1D,uDAAuD;IACvD,yBAAyB,CAAC,IAAe,EAAE,GAAQ;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,CAAC;SACX;QAED,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,yBAAyB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QACxH,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,mCAAmC,CAAC;QAC9D,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,+BAA+B,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,qCAAqC,CAAC;QAC/H,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,gCAAgC,MAAM,MAAM,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtH,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,2BAA2B,CAAC;QACtD,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;QACpC,OAAO,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;QACtC,OAAO,IAAI,OAAO,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { Context } from './context.js';
2
+ import * as rust from '../codemodel/index.js';
3
+ export declare function emitEnums(crate: rust.Crate, context: Context): string;
4
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../src/codegen/enums.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA+CrE"}
@@ -0,0 +1,48 @@
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 helpers from './helpers.js';
6
+ import { Use } from './use.js';
7
+ // emits the enums.rs file for this crate
8
+ export function emitEnums(crate, context) {
9
+ if (crate.enums.length === 0) {
10
+ return '';
11
+ }
12
+ const use = new Use('models');
13
+ use.addTypes('serde', ['Deserialize', 'Serialize']);
14
+ const indentation = new helpers.indentation();
15
+ let body = '';
16
+ for (const rustEnum of crate.enums) {
17
+ body += helpers.formatDocComment(rustEnum.docs);
18
+ // only derive Copy for fixed enums
19
+ body += helpers.annotationDerive(!rustEnum.extensible ? 'Copy' : '', 'Eq', 'PartialEq');
20
+ body += helpers.AnnotationNonExhaustive;
21
+ body += `${helpers.emitPub(rustEnum.pub)}enum ${rustEnum.name} {\n`;
22
+ for (const value of rustEnum.values) {
23
+ body += helpers.formatDocComment(value.docs);
24
+ if (value.name !== value.value) {
25
+ // only emit the serde annotation when the names aren't equal
26
+ body += `${indentation.get()}#[serde(rename = "${value.value}")]\n`;
27
+ }
28
+ body += `${indentation.get()}${value.name},\n`;
29
+ }
30
+ if (rustEnum.extensible) {
31
+ body += `${indentation.get()}#[serde(untagged)]\n`;
32
+ // TODO: hard-coded String type
33
+ // https://github.com/Azure/typespec-rust/issues/25
34
+ body += `${indentation.get()}UnknownValue(String),\n`;
35
+ }
36
+ body += '}\n\n';
37
+ }
38
+ // emit TryFrom as required
39
+ for (const rustEnum of crate.enums) {
40
+ body += context.getTryFromForRequestContent(rustEnum, use);
41
+ body += context.getTryFromResponseForType(rustEnum, use);
42
+ }
43
+ let content = helpers.contentPreamble();
44
+ content += use.text();
45
+ content += body;
46
+ return content;
47
+ }
48
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/codegen/enums.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAG/F,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,yCAAyC;AACzC,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,OAAgB;IAC3D,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,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,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;QAClC,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,mCAAmC;QACnC,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACxF,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;QACxC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC,IAAI,MAAM,CAAC;QAEpE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnC,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;YACD,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;SAChD;QAED,IAAI,QAAQ,CAAC,UAAU,EAAE;YACvB,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,+BAA+B;YAC/B,mDAAmD;YACnD,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,yBAAyB,CAAC;SACvD;QACD,IAAI,IAAI,OAAO,CAAC;KACjB;IAED,2BAA2B;IAC3B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;QAClC,IAAI,IAAI,OAAO,CAAC,2BAA2B,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3D,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC1D;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"}
@@ -0,0 +1,18 @@
1
+ import * as rust from '../codemodel/index.js';
2
+ export declare const AnnotationNonExhaustive = "#[non_exhaustive]\n";
3
+ export declare const AnonymousLifetimeAnnotation = "<'_>";
4
+ export declare function contentPreamble(): string;
5
+ export declare function formatDocComment(docs: rust.Docs): string;
6
+ export declare function emitPub(pub: boolean): string;
7
+ export declare function getTypeDeclaration(type: rust.Type, withAnonymousLifetime?: boolean): string;
8
+ export declare class indentation {
9
+ private level;
10
+ constructor();
11
+ get(): string;
12
+ push(): indentation;
13
+ pop(): indentation;
14
+ }
15
+ export declare function annotationDerive(...extra: Array<string>): string;
16
+ export declare function sortAscending(a: string, b: string): number;
17
+ export declare function getGenericLifetimeAnnotation(lifetime: rust.Lifetime): string;
18
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/codegen/helpers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAS9C,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAGnD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAkBxD;AAGD,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE5C;AAGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,qBAAqB,UAAQ,GAAG,MAAM,CA4CzF;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;;IAOtB,GAAG,IAAI,MAAM;IASb,IAAI,IAAI,WAAW;IAMnB,GAAG,IAAI,WAAW;CAOnB;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAOhE;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAGD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAE5E"}
@@ -0,0 +1,133 @@
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
+ const headerText = `// Copyright (c) Microsoft Corporation. All rights reserved.
7
+ //
8
+ // Licensed under the MIT License. See License.txt in the project root for license information.
9
+ // Code generated by Microsoft (R) Rust Code Generator. DO NOT EDIT.
10
+
11
+ `;
12
+ export const AnnotationNonExhaustive = '#[non_exhaustive]\n';
13
+ export const AnonymousLifetimeAnnotation = '<\'_>';
14
+ // returns the content preamble common to all emitted files
15
+ export function contentPreamble() {
16
+ return headerText;
17
+ }
18
+ // formats doc comments if available
19
+ export function formatDocComment(docs) {
20
+ if (!docs.summary && !docs.description) {
21
+ return '';
22
+ }
23
+ let docStr = '';
24
+ if (docs.summary) {
25
+ docStr = codegen.comment(docs.summary, '/// ', undefined, 120) + '\n';
26
+ }
27
+ if (docs.description) {
28
+ if (docs.summary) {
29
+ docStr += '///\n';
30
+ }
31
+ docStr += codegen.comment(docs.description, '/// ', undefined, 120) + '\n';
32
+ }
33
+ return docStr;
34
+ }
35
+ // returns 'pub ' prefix as required
36
+ export function emitPub(pub) {
37
+ return pub ? 'pub ' : '';
38
+ }
39
+ // returns the type declaration string for the specified Rust type
40
+ export function getTypeDeclaration(type, withAnonymousLifetime = false) {
41
+ switch (type.kind) {
42
+ case 'arc':
43
+ return `${type.name}<dyn ${getTypeDeclaration(type.type)}>`;
44
+ case 'encodedBytes':
45
+ return 'Vec<u8>';
46
+ case 'hashmap':
47
+ return `${type.name}<String, ${getTypeDeclaration(type.type, withAnonymousLifetime)}>`;
48
+ case 'implTrait':
49
+ return `impl ${type.name}<${getTypeDeclaration(type.type, withAnonymousLifetime)}>`;
50
+ case 'literal':
51
+ return `${type.value}`;
52
+ case 'option':
53
+ return `Option<${type.ref ? '&' : ''}${getTypeDeclaration(type.type, withAnonymousLifetime)}>`;
54
+ case 'requestContent':
55
+ case 'response':
56
+ case 'result':
57
+ return `${type.name}<${getTypeDeclaration(type.type, withAnonymousLifetime)}>`;
58
+ case 'String':
59
+ case 'str':
60
+ case 'Url':
61
+ return type.kind;
62
+ case 'scalar':
63
+ return type.type;
64
+ case 'enum':
65
+ case 'jsonValue':
66
+ case 'offsetDateTime':
67
+ case 'tokenCredential':
68
+ return type.name;
69
+ case 'external':
70
+ case 'model':
71
+ case 'struct':
72
+ if (!type.lifetime) {
73
+ return type.name;
74
+ }
75
+ else if (withAnonymousLifetime) {
76
+ // this type has a lifetime but we don't want its name
77
+ return `${type.name}${AnonymousLifetimeAnnotation}`;
78
+ }
79
+ return `${type.name}${getGenericLifetimeAnnotation(type.lifetime)}`;
80
+ case 'unit':
81
+ return '()';
82
+ case 'vector':
83
+ return `Vec<${getTypeDeclaration(type.type, withAnonymousLifetime)}>`;
84
+ }
85
+ }
86
+ // four spaces per indent level
87
+ const oneIndentation = ' ';
88
+ // helper for managing indentation levels
89
+ export class indentation {
90
+ constructor() {
91
+ // level is one-based.
92
+ this.level = 1;
93
+ }
94
+ // returns spaces for the current indentation level
95
+ get() {
96
+ let indent = oneIndentation;
97
+ for (let i = 1; i < this.level; ++i) {
98
+ indent += oneIndentation;
99
+ }
100
+ return indent;
101
+ }
102
+ // increments the indentation level
103
+ push() {
104
+ ++this.level;
105
+ return this;
106
+ }
107
+ // decrements the indentation level
108
+ pop() {
109
+ --this.level;
110
+ if (this.level < 1) {
111
+ throw new Error('indentation stack underflow');
112
+ }
113
+ return this;
114
+ }
115
+ }
116
+ // emits the derive annotation with the standard and any additional values
117
+ export function annotationDerive(...extra) {
118
+ const derive = new Array('Clone', 'Debug', 'Deserialize', 'Serialize');
119
+ // remove any empty values
120
+ extra = extra.filter(entry => entry.trim() !== '');
121
+ derive.push(...extra);
122
+ derive.sort();
123
+ return `#[derive(${derive.join(', ')})]\n`;
124
+ }
125
+ // used to sort strings in ascending order
126
+ export function sortAscending(a, b) {
127
+ return a < b ? -1 : a > b ? 1 : 0;
128
+ }
129
+ // returns the generic lifetime annotation string for lifetime (e.g. <'a>)
130
+ export function getGenericLifetimeAnnotation(lifetime) {
131
+ return `<${lifetime.name}>`;
132
+ }
133
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/codegen/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as rust from '../codemodel/index.js';
2
+ export declare function emitLib(crate: rust.Crate): string;
3
+ //# sourceMappingURL=lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/codegen/lib.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAoCjD"}
@@ -0,0 +1,37 @@
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 * as helpers from './helpers.js';
7
+ // emits the lib.rs file
8
+ export function emitLib(crate) {
9
+ let content = helpers.contentPreamble();
10
+ content += 'mod generated;\n\n';
11
+ if (crate.clients.length > 0) {
12
+ content += 'pub use crate::generated::clients::*;\n\n';
13
+ }
14
+ let closeModels = false;
15
+ if (crate.enums.length > 0 || crate.models.length > 0) {
16
+ closeModels = true;
17
+ content += 'pub mod models {\n';
18
+ }
19
+ const indentation = new helpers.indentation();
20
+ if (crate.enums.length > 0) {
21
+ content += `${indentation.get()}pub use crate::generated::enums::*;\n`;
22
+ }
23
+ if (crate.models.length > 0) {
24
+ content += `${indentation.get()}pub use crate::generated::models::*;\n`;
25
+ }
26
+ if (closeModels) {
27
+ content += '}\n';
28
+ }
29
+ // add all instantiable clients to the crate's root namespace
30
+ for (const client of crate.clients) {
31
+ if (client.constructable) {
32
+ content += `\npub use ${codegen.deconstruct(client.name).join('_')}::${client.name};\n`;
33
+ }
34
+ }
35
+ return content;
36
+ }
37
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/codegen/lib.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAGxC,wBAAwB;AACxB,MAAM,UAAU,OAAO,CAAC,KAAiB;IACvC,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,OAAO,IAAI,oBAAoB,CAAC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,OAAO,IAAI,2CAA2C,CAAC;KACxD;IAED,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrD,WAAW,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,oBAAoB,CAAC;KACjC;IAED,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,OAAO,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,uCAAuC,CAAC;KACxE;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,OAAO,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,wCAAwC,CAAC;KACzE;IAED,IAAI,WAAW,EAAE;QACf,OAAO,IAAI,KAAK,CAAC;KAClB;IAED,6DAA6D;IAC7D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;QAClC,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,OAAO,IAAI,aAAa,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC;SACzF;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as rust from '../codemodel/index.js';
2
+ export declare function emitMod(crate: rust.Crate): string;
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/codegen/mod.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAYjD"}
@@ -0,0 +1,20 @@
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 helpers from './helpers.js';
6
+ // emits the mod.rs file
7
+ export function emitMod(crate) {
8
+ let content = helpers.contentPreamble();
9
+ if (crate.clients.length > 0) {
10
+ content += 'pub mod clients;\n';
11
+ }
12
+ if (crate.enums.length > 0) {
13
+ content += 'pub mod enums;\n';
14
+ }
15
+ if (crate.models.length > 0) {
16
+ content += 'pub mod models;\n';
17
+ }
18
+ return content;
19
+ }
20
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/codegen/mod.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAGxC,wBAAwB;AACxB,MAAM,UAAU,OAAO,CAAC,KAAiB;IACvC,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,OAAO,IAAI,oBAAoB,CAAC;KACjC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,OAAO,IAAI,kBAAkB,CAAC;KAC/B;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,OAAO,IAAI,mBAAmB,CAAC;KAChC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Context } from './context.js';
2
+ import * as rust from '../codemodel/index.js';
3
+ export declare function emitModels(crate: rust.Crate, context: Context): string;
4
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/codegen/models.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA6CtE"}
@@ -0,0 +1,45 @@
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 helpers from './helpers.js';
6
+ import { Use } from './use.js';
7
+ // emits the models.rs file for this crate
8
+ export function emitModels(crate, context) {
9
+ if (crate.models.length === 0) {
10
+ return '';
11
+ }
12
+ const use = new Use('models');
13
+ use.addTypes('serde', ['Deserialize', 'Serialize']);
14
+ const indentation = new helpers.indentation();
15
+ let body = '';
16
+ for (const model of crate.models) {
17
+ body += helpers.formatDocComment(model.docs);
18
+ body += helpers.annotationDerive('Default');
19
+ body += helpers.AnnotationNonExhaustive;
20
+ body += `${helpers.emitPub(model.pub)}struct ${model.name} {\n`;
21
+ for (const field of model.fields) {
22
+ use.addForType(field.type);
23
+ 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`;
27
+ }
28
+ // TODO: omit skip_serializing_if if we need to send explicit JSON null
29
+ // 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`;
32
+ }
33
+ body += '}\n\n';
34
+ }
35
+ // emit TryFrom as required
36
+ for (const model of crate.models) {
37
+ body += context.getTryFromForRequestContent(model, use);
38
+ body += context.getTryFromResponseForType(model, use);
39
+ }
40
+ let content = helpers.contentPreamble();
41
+ content += use.text();
42
+ content += body;
43
+ return content;
44
+ }
45
+ //# sourceMappingURL=models.js.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import * as rust from '../codemodel/index.js';
2
+ export declare class Use {
3
+ private uses;
4
+ private scope?;
5
+ constructor(scope?: 'models');
6
+ addType(module: string, type: string): void;
7
+ addTypes(module: string, types: Array<string>): void;
8
+ addForType(type: rust.Client | rust.Type): void;
9
+ text(): string;
10
+ }
11
+ //# sourceMappingURL=use.d.ts.map
@@ -0,0 +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"}