@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,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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|