@azure-tools/typespec-go 0.14.3 → 0.15.0-dev.4
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/CHANGELOG.md +669 -0
- package/README.md +6 -4
- package/dist/{codegen.go/src/core/clientFactory.d.ts → src/codegen/core/client-factory.d.ts} +2 -2
- package/dist/src/codegen/core/client-factory.d.ts.map +1 -0
- package/dist/{codegen.go/src/core/clientFactory.js → src/codegen/core/client-factory.js} +29 -24
- package/dist/src/codegen/core/client-factory.js.map +1 -0
- package/dist/{codegen.go/src/core/cloudConfig.d.ts → src/codegen/core/cloud-config.d.ts} +2 -2
- package/dist/src/codegen/core/cloud-config.d.ts.map +1 -0
- package/dist/{codegen.go/src/core/cloudConfig.js → src/codegen/core/cloud-config.js} +10 -9
- package/dist/src/codegen/core/cloud-config.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/constants.d.ts +1 -1
- package/dist/src/codegen/core/constants.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/constants.js +9 -9
- package/dist/src/codegen/core/constants.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/errors.d.ts +1 -1
- package/dist/src/codegen/core/errors.d.ts.map +1 -0
- package/dist/src/codegen/core/errors.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/example.d.ts +1 -1
- package/dist/src/codegen/core/example.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/example.js +155 -140
- package/dist/src/codegen/core/example.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/gomod.d.ts +1 -1
- package/dist/src/codegen/core/gomod.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/gomod.js +8 -8
- package/dist/src/codegen/core/gomod.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/helpers.d.ts +5 -5
- package/dist/src/codegen/core/helpers.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/helpers.js +308 -284
- package/dist/src/codegen/core/helpers.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/imports.d.ts +1 -1
- package/dist/src/codegen/core/imports.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/imports.js +19 -18
- package/dist/src/codegen/core/imports.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/interfaces.d.ts +1 -1
- package/dist/src/codegen/core/interfaces.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/interfaces.js +5 -5
- package/dist/src/codegen/core/interfaces.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/license.d.ts +1 -1
- package/dist/src/codegen/core/license.d.ts.map +1 -0
- package/dist/src/codegen/core/license.js.map +1 -0
- package/dist/src/codegen/core/metadata.d.ts +3 -0
- package/dist/src/codegen/core/metadata.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/metadata.js +1 -1
- package/dist/src/codegen/core/metadata.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/models.d.ts +2 -2
- package/dist/src/codegen/core/models.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/models.js +212 -181
- package/dist/src/codegen/core/models.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/operations.d.ts +1 -1
- package/dist/src/codegen/core/operations.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/operations.js +383 -360
- package/dist/src/codegen/core/operations.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/options.d.ts +1 -1
- package/dist/src/codegen/core/options.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/options.js +11 -11
- package/dist/src/codegen/core/options.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/polymorphics.d.ts +1 -1
- package/dist/src/codegen/core/polymorphics.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/polymorphics.js +30 -30
- package/dist/src/codegen/core/polymorphics.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/responses.d.ts +1 -1
- package/dist/src/codegen/core/responses.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/responses.js +28 -28
- package/dist/src/codegen/core/responses.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/version.d.ts +1 -1
- package/dist/src/codegen/core/version.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/core/version.js +4 -4
- package/dist/src/codegen/core/version.js.map +1 -0
- package/dist/{codegen.go/src/core/xmlAdditionalProps.d.ts → src/codegen/core/xml-additional-props.d.ts} +2 -2
- package/dist/src/codegen/core/xml-additional-props.d.ts.map +1 -0
- package/dist/{codegen.go/src/core/xmlAdditionalProps.js → src/codegen/core/xml-additional-props.js} +11 -11
- package/dist/src/codegen/core/xml-additional-props.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/emitter.d.ts +2 -2
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/emitter.js +58 -54
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/factory.d.ts +1 -1
- package/dist/src/codegen/fake/factory.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/factory.js +22 -21
- package/dist/src/codegen/fake/factory.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/internal.d.ts +1 -1
- package/dist/src/codegen/fake/internal.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/internal.js +13 -13
- package/dist/src/codegen/fake/internal.js.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/servers.d.ts +1 -1
- package/dist/src/codegen/fake/servers.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/fake/servers.js +332 -300
- package/dist/src/codegen/fake/servers.js.map +1 -0
- package/dist/src/codegen/index.d.ts +4 -0
- package/dist/src/codegen/index.d.ts.map +1 -0
- package/dist/{codegen.go/src → src/codegen}/index.js +3 -3
- package/dist/src/codegen/index.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/client.d.ts +25 -25
- package/dist/src/codemodel/client.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/client.js +32 -32
- package/dist/src/codemodel/client.js.map +1 -0
- package/dist/{codemodel.go/src/codeModel.d.ts → src/codemodel/code-model.d.ts} +3 -3
- package/dist/src/codemodel/code-model.d.ts.map +1 -0
- package/dist/{codemodel.go/src/codeModel.js → src/codemodel/code-model.js} +1 -1
- package/dist/src/codemodel/code-model.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/errors.d.ts +5 -5
- package/dist/src/codemodel/errors.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/errors.js +1 -1
- package/dist/src/codemodel/errors.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/examples.d.ts +13 -13
- package/dist/src/codemodel/examples.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/examples.js +10 -10
- package/dist/src/codemodel/examples.js.map +1 -0
- package/dist/src/codemodel/index.d.ts +9 -0
- package/dist/src/codemodel/index.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/index.js +8 -8
- package/dist/src/codemodel/index.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/method.d.ts +1 -1
- package/dist/src/codemodel/method.d.ts.map +1 -0
- package/dist/src/codemodel/method.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/module.d.ts +8 -8
- package/dist/src/codemodel/module.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/module.js +12 -11
- package/dist/src/codemodel/module.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/param.d.ts +26 -26
- package/dist/src/codemodel/param.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/param.js +56 -53
- package/dist/src/codemodel/param.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/result.d.ts +15 -15
- package/dist/src/codemodel/result.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/result.js +27 -27
- package/dist/src/codemodel/result.js.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/type.d.ts +30 -30
- package/dist/src/codemodel/type.d.ts.map +1 -0
- package/dist/{codemodel.go/src → src/codemodel}/type.js +77 -76
- package/dist/src/codemodel/type.js.map +1 -0
- package/dist/{typespec-go/src → src}/emitter.d.ts +2 -3
- package/dist/src/emitter.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/emitter.js +56 -45
- 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/{typespec-go/src → src}/index.js +2 -2
- package/dist/src/index.js.map +1 -0
- package/dist/{typespec-go/src → src}/lib.d.ts +16 -16
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/lib.js +60 -61
- package/dist/src/lib.js.map +1 -0
- package/dist/src/naming/index.d.ts +3 -0
- package/dist/src/naming/index.d.ts.map +1 -0
- package/dist/{naming.go/src → src/naming}/index.js +2 -2
- package/dist/src/naming/index.js.map +1 -0
- package/dist/src/naming/mappings.d.ts.map +1 -0
- package/dist/src/naming/mappings.js +294 -0
- package/dist/src/naming/mappings.js.map +1 -0
- package/dist/src/naming/naming.d.ts.map +1 -0
- package/dist/{naming.go/src → src/naming}/naming.js +10 -10
- package/dist/src/naming/naming.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/adapter.d.ts +3 -3
- package/dist/src/tcgcadapter/adapter.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/adapter.js +35 -31
- package/dist/src/tcgcadapter/adapter.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/clients.d.ts +1 -1
- package/dist/src/tcgcadapter/clients.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/clients.js +360 -310
- package/dist/src/tcgcadapter/clients.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/errors.d.ts +2 -2
- package/dist/src/tcgcadapter/errors.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/errors.js +1 -1
- package/dist/src/tcgcadapter/errors.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/helpers.d.ts +3 -3
- package/dist/src/tcgcadapter/helpers.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/helpers.js +41 -30
- package/dist/src/tcgcadapter/helpers.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/metadata.d.ts +2 -2
- package/dist/src/tcgcadapter/metadata.d.ts.map +1 -0
- package/dist/src/tcgcadapter/metadata.js +47 -0
- package/dist/src/tcgcadapter/metadata.js.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/types.d.ts +2 -2
- package/dist/src/tcgcadapter/types.d.ts.map +1 -0
- package/dist/{typespec-go/src → src}/tcgcadapter/types.js +208 -191
- package/dist/src/tcgcadapter/types.js.map +1 -0
- package/package.json +77 -62
- package/dist/codegen.go/src/core/clientFactory.d.ts.map +0 -1
- package/dist/codegen.go/src/core/clientFactory.js.map +0 -1
- package/dist/codegen.go/src/core/cloudConfig.d.ts.map +0 -1
- package/dist/codegen.go/src/core/cloudConfig.js.map +0 -1
- package/dist/codegen.go/src/core/constants.d.ts.map +0 -1
- package/dist/codegen.go/src/core/constants.js.map +0 -1
- package/dist/codegen.go/src/core/errors.d.ts.map +0 -1
- package/dist/codegen.go/src/core/errors.js.map +0 -1
- package/dist/codegen.go/src/core/example.d.ts.map +0 -1
- package/dist/codegen.go/src/core/example.js.map +0 -1
- package/dist/codegen.go/src/core/gomod.d.ts.map +0 -1
- package/dist/codegen.go/src/core/gomod.js.map +0 -1
- package/dist/codegen.go/src/core/helpers.d.ts.map +0 -1
- package/dist/codegen.go/src/core/helpers.js.map +0 -1
- package/dist/codegen.go/src/core/imports.d.ts.map +0 -1
- package/dist/codegen.go/src/core/imports.js.map +0 -1
- package/dist/codegen.go/src/core/interfaces.d.ts.map +0 -1
- package/dist/codegen.go/src/core/interfaces.js.map +0 -1
- package/dist/codegen.go/src/core/license.d.ts.map +0 -1
- package/dist/codegen.go/src/core/license.js.map +0 -1
- package/dist/codegen.go/src/core/metadata.d.ts +0 -3
- package/dist/codegen.go/src/core/metadata.d.ts.map +0 -1
- package/dist/codegen.go/src/core/metadata.js.map +0 -1
- package/dist/codegen.go/src/core/models.d.ts.map +0 -1
- package/dist/codegen.go/src/core/models.js.map +0 -1
- package/dist/codegen.go/src/core/operations.d.ts.map +0 -1
- package/dist/codegen.go/src/core/operations.js.map +0 -1
- package/dist/codegen.go/src/core/options.d.ts.map +0 -1
- package/dist/codegen.go/src/core/options.js.map +0 -1
- package/dist/codegen.go/src/core/polymorphics.d.ts.map +0 -1
- package/dist/codegen.go/src/core/polymorphics.js.map +0 -1
- package/dist/codegen.go/src/core/responses.d.ts.map +0 -1
- package/dist/codegen.go/src/core/responses.js.map +0 -1
- package/dist/codegen.go/src/core/version.d.ts.map +0 -1
- package/dist/codegen.go/src/core/version.js.map +0 -1
- package/dist/codegen.go/src/core/xmlAdditionalProps.d.ts.map +0 -1
- package/dist/codegen.go/src/core/xmlAdditionalProps.js.map +0 -1
- package/dist/codegen.go/src/emitter.d.ts.map +0 -1
- package/dist/codegen.go/src/emitter.js.map +0 -1
- package/dist/codegen.go/src/fake/factory.d.ts.map +0 -1
- package/dist/codegen.go/src/fake/factory.js.map +0 -1
- package/dist/codegen.go/src/fake/internal.d.ts.map +0 -1
- package/dist/codegen.go/src/fake/internal.js.map +0 -1
- package/dist/codegen.go/src/fake/servers.d.ts.map +0 -1
- package/dist/codegen.go/src/fake/servers.js.map +0 -1
- package/dist/codegen.go/src/index.d.ts +0 -4
- package/dist/codegen.go/src/index.d.ts.map +0 -1
- package/dist/codegen.go/src/index.js.map +0 -1
- package/dist/codemodel.go/src/client.d.ts.map +0 -1
- package/dist/codemodel.go/src/client.js.map +0 -1
- package/dist/codemodel.go/src/codeModel.d.ts.map +0 -1
- package/dist/codemodel.go/src/codeModel.js.map +0 -1
- package/dist/codemodel.go/src/errors.d.ts.map +0 -1
- package/dist/codemodel.go/src/errors.js.map +0 -1
- package/dist/codemodel.go/src/examples.d.ts.map +0 -1
- package/dist/codemodel.go/src/examples.js.map +0 -1
- package/dist/codemodel.go/src/index.d.ts +0 -9
- package/dist/codemodel.go/src/index.d.ts.map +0 -1
- package/dist/codemodel.go/src/index.js.map +0 -1
- package/dist/codemodel.go/src/method.d.ts.map +0 -1
- package/dist/codemodel.go/src/method.js.map +0 -1
- package/dist/codemodel.go/src/module.d.ts.map +0 -1
- package/dist/codemodel.go/src/module.js.map +0 -1
- package/dist/codemodel.go/src/param.d.ts.map +0 -1
- package/dist/codemodel.go/src/param.js.map +0 -1
- package/dist/codemodel.go/src/result.d.ts.map +0 -1
- package/dist/codemodel.go/src/result.js.map +0 -1
- package/dist/codemodel.go/src/type.d.ts.map +0 -1
- package/dist/codemodel.go/src/type.js.map +0 -1
- package/dist/naming.go/src/index.d.ts +0 -3
- package/dist/naming.go/src/index.d.ts.map +0 -1
- package/dist/naming.go/src/index.js.map +0 -1
- package/dist/naming.go/src/mappings.d.ts.map +0 -1
- package/dist/naming.go/src/mappings.js +0 -294
- package/dist/naming.go/src/mappings.js.map +0 -1
- package/dist/naming.go/src/naming.d.ts.map +0 -1
- package/dist/naming.go/src/naming.js.map +0 -1
- package/dist/typespec-go/src/emitter.d.ts.map +0 -1
- package/dist/typespec-go/src/emitter.js.map +0 -1
- package/dist/typespec-go/src/index.d.ts +0 -3
- package/dist/typespec-go/src/index.d.ts.map +0 -1
- package/dist/typespec-go/src/index.js.map +0 -1
- package/dist/typespec-go/src/lib.d.ts.map +0 -1
- package/dist/typespec-go/src/lib.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/clients.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/errors.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/errors.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/helpers.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/helpers.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/metadata.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/metadata.js +0 -21
- package/dist/typespec-go/src/tcgcadapter/metadata.js.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +0 -1
- package/dist/typespec-go/src/tcgcadapter/types.js.map +0 -1
- /package/dist/{codegen.go/src → src/codegen}/core/errors.js +0 -0
- /package/dist/{codegen.go/src → src/codegen}/core/license.js +0 -0
- /package/dist/{codemodel.go/src → src/codemodel}/method.js +0 -0
- /package/dist/{naming.go/src → src/naming}/mappings.d.ts +0 -0
- /package/dist/{naming.go/src → src/naming}/naming.d.ts +0 -0
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
|
|
6
|
-
import * as
|
|
7
|
-
import * as
|
|
8
|
-
import * as
|
|
9
|
-
import * as go from
|
|
10
|
-
import * as naming from
|
|
11
|
-
import { AdapterError } from
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-deprecated -- uses TCGC APIs marked deprecated (serializedName) as a documented fallback when serializationOptions is empty. */
|
|
6
|
+
import * as tcgc from "@azure-tools/typespec-client-generator-core";
|
|
7
|
+
import * as tsp from "@typespec/compiler";
|
|
8
|
+
import * as http from "@typespec/http";
|
|
9
|
+
import * as go from "../codemodel/index.js";
|
|
10
|
+
import * as naming from "../naming/naming.js";
|
|
11
|
+
import { AdapterError } from "../tcgcadapter/errors.js";
|
|
12
|
+
import * as helpers from "./helpers.js";
|
|
12
13
|
/** used to convert tcgc types to Go code model types */
|
|
13
14
|
export class TypeAdapter {
|
|
14
15
|
/** the SdkContext for this adapter */
|
|
@@ -34,7 +35,9 @@ export class TypeAdapter {
|
|
|
34
35
|
* @returns the module or package to contain the adapted tcgc model
|
|
35
36
|
*/
|
|
36
37
|
getPkg() {
|
|
37
|
-
return this.codeModel.root.kind ===
|
|
38
|
+
return this.codeModel.root.kind === "containingModule"
|
|
39
|
+
? this.codeModel.root.package
|
|
40
|
+
: this.codeModel.root;
|
|
38
41
|
}
|
|
39
42
|
/**
|
|
40
43
|
* converts all tcgc model/enum types to Go code model types
|
|
@@ -45,7 +48,8 @@ export class TypeAdapter {
|
|
|
45
48
|
// skip enums that are used for API version
|
|
46
49
|
continue;
|
|
47
50
|
}
|
|
48
|
-
else if ((enumType.usage & tcgc.UsageFlags.Input) === 0 &&
|
|
51
|
+
else if ((enumType.usage & tcgc.UsageFlags.Input) === 0 &&
|
|
52
|
+
(enumType.usage & tcgc.UsageFlags.Output) === 0) {
|
|
49
53
|
// skip types without input and output usage
|
|
50
54
|
continue;
|
|
51
55
|
}
|
|
@@ -61,11 +65,13 @@ export class TypeAdapter {
|
|
|
61
65
|
// we don't use these so just skip them.
|
|
62
66
|
continue;
|
|
63
67
|
}
|
|
64
|
-
else if (modelType.access ===
|
|
68
|
+
else if (modelType.access === "internal" &&
|
|
69
|
+
(modelType.usage & tcgc.UsageFlags.Spread) !== 0) {
|
|
65
70
|
// we don't use the internal models for spread params
|
|
66
71
|
continue;
|
|
67
72
|
}
|
|
68
|
-
else if ((modelType.usage & tcgc.UsageFlags.Input) === 0 &&
|
|
73
|
+
else if ((modelType.usage & tcgc.UsageFlags.Input) === 0 &&
|
|
74
|
+
(modelType.usage & tcgc.UsageFlags.Output) === 0) {
|
|
69
75
|
// skip types without input and output usage
|
|
70
76
|
continue;
|
|
71
77
|
}
|
|
@@ -73,7 +79,8 @@ export class TypeAdapter {
|
|
|
73
79
|
// we flatten these params into their underlying type
|
|
74
80
|
continue;
|
|
75
81
|
}
|
|
76
|
-
else if (helpers.isHttpFileType(modelType) ||
|
|
82
|
+
else if (helpers.isHttpFileType(modelType) ||
|
|
83
|
+
(modelType.baseModel && helpers.isHttpFileType(modelType.baseModel))) {
|
|
77
84
|
// use use streaming.MultipartContent from azcore
|
|
78
85
|
continue;
|
|
79
86
|
}
|
|
@@ -115,7 +122,7 @@ export class TypeAdapter {
|
|
|
115
122
|
if (content.addlProps) {
|
|
116
123
|
const annotations = new go.ModelFieldAnnotations(false, false, true, false);
|
|
117
124
|
const addlPropsType = new go.Map(this.getWireType(content.addlProps, false, false), helpers.isTypePassedByValue(content.addlProps));
|
|
118
|
-
const addlProps = new go.ModelField(
|
|
125
|
+
const addlProps = new go.ModelField("AdditionalProperties", addlPropsType, true, "", annotations);
|
|
119
126
|
modelType.go.fields.push(addlProps);
|
|
120
127
|
}
|
|
121
128
|
this.getPkg().models.push(modelType.go);
|
|
@@ -131,11 +138,11 @@ export class TypeAdapter {
|
|
|
131
138
|
}
|
|
132
139
|
}
|
|
133
140
|
for (const sdkMethod of client.methods) {
|
|
134
|
-
if (sdkMethod.kind !==
|
|
141
|
+
if (sdkMethod.kind !== "paging") {
|
|
135
142
|
continue;
|
|
136
143
|
}
|
|
137
144
|
for (const httpResp of sdkMethod.operation.responses.values()) {
|
|
138
|
-
if (!httpResp.type || httpResp.type.kind !==
|
|
145
|
+
if (!httpResp.type || httpResp.type.kind !== "model") {
|
|
139
146
|
continue;
|
|
140
147
|
}
|
|
141
148
|
if (!pagedResponses.find((each) => each.name === httpResp.type.name)) {
|
|
@@ -154,38 +161,42 @@ export class TypeAdapter {
|
|
|
154
161
|
// returns the same instance of the converted type.
|
|
155
162
|
getWireType(type, elementTypeByValue, substituteDiscriminator) {
|
|
156
163
|
switch (type.kind) {
|
|
157
|
-
case
|
|
158
|
-
case
|
|
159
|
-
case
|
|
160
|
-
case
|
|
161
|
-
case
|
|
162
|
-
case
|
|
163
|
-
case
|
|
164
|
-
case
|
|
165
|
-
case
|
|
166
|
-
case
|
|
167
|
-
case
|
|
168
|
-
case
|
|
169
|
-
case
|
|
170
|
-
case
|
|
171
|
-
case
|
|
172
|
-
case
|
|
173
|
-
case
|
|
174
|
-
case
|
|
175
|
-
case
|
|
176
|
-
case
|
|
177
|
-
case
|
|
164
|
+
case "boolean":
|
|
165
|
+
case "bytes":
|
|
166
|
+
case "decimal":
|
|
167
|
+
case "decimal128":
|
|
168
|
+
case "float":
|
|
169
|
+
case "float32":
|
|
170
|
+
case "float64":
|
|
171
|
+
case "int8":
|
|
172
|
+
case "int16":
|
|
173
|
+
case "int32":
|
|
174
|
+
case "int64":
|
|
175
|
+
case "uint8":
|
|
176
|
+
case "uint16":
|
|
177
|
+
case "uint32":
|
|
178
|
+
case "uint64":
|
|
179
|
+
case "unknown":
|
|
180
|
+
case "safeint":
|
|
181
|
+
case "plainDate":
|
|
182
|
+
case "plainTime":
|
|
183
|
+
case "string":
|
|
184
|
+
case "url":
|
|
178
185
|
return this.getBuiltInType(type);
|
|
179
|
-
case
|
|
186
|
+
case "array": {
|
|
180
187
|
let elementType = type.valueType;
|
|
181
188
|
let nullable = false;
|
|
182
|
-
if (elementType.kind ===
|
|
189
|
+
if (elementType.kind === "nullable") {
|
|
183
190
|
// unwrap the nullable type
|
|
184
191
|
elementType = elementType.type;
|
|
185
192
|
nullable = true;
|
|
186
193
|
}
|
|
187
194
|
// prefer elementTypeByValue. if false, then if the array elements have been explicitly marked as nullable then prefer that, else fall back to our usual algorithm
|
|
188
|
-
const myElementTypeByValue = elementTypeByValue
|
|
195
|
+
const myElementTypeByValue = elementTypeByValue
|
|
196
|
+
? true
|
|
197
|
+
: nullable
|
|
198
|
+
? false
|
|
199
|
+
: this.codeModel.options.sliceElementsByval || helpers.isTypePassedByValue(elementType);
|
|
189
200
|
const keyName = recursiveKeyName(`array-${myElementTypeByValue}`, elementType, substituteDiscriminator);
|
|
190
201
|
let arrayType = this.types.get(keyName);
|
|
191
202
|
if (arrayType) {
|
|
@@ -195,19 +206,19 @@ export class TypeAdapter {
|
|
|
195
206
|
this.types.set(keyName, arrayType);
|
|
196
207
|
return arrayType;
|
|
197
208
|
}
|
|
198
|
-
case
|
|
209
|
+
case "endpoint": {
|
|
199
210
|
return this.getStringType();
|
|
200
211
|
}
|
|
201
|
-
case
|
|
212
|
+
case "enum":
|
|
202
213
|
return this.getConstantType(type);
|
|
203
|
-
case
|
|
204
|
-
case
|
|
214
|
+
case "constant":
|
|
215
|
+
case "enumvalue":
|
|
205
216
|
return this.getLiteralValue(type);
|
|
206
|
-
case
|
|
217
|
+
case "offsetDateTime":
|
|
207
218
|
return this.getTimeType(type.encode, false);
|
|
208
|
-
case
|
|
219
|
+
case "utcDateTime":
|
|
209
220
|
return this.getTimeType(type.encode, true);
|
|
210
|
-
case
|
|
221
|
+
case "dict": {
|
|
211
222
|
const valueTypeByValue = helpers.isTypePassedByValue(type.valueType);
|
|
212
223
|
const keyName = recursiveKeyName(`dict-${valueTypeByValue}`, type.valueType, substituteDiscriminator);
|
|
213
224
|
let mapType = this.types.get(keyName);
|
|
@@ -218,31 +229,32 @@ export class TypeAdapter {
|
|
|
218
229
|
this.types.set(keyName, mapType);
|
|
219
230
|
return mapType;
|
|
220
231
|
}
|
|
221
|
-
case
|
|
232
|
+
case "duration": {
|
|
222
233
|
switch (type.wireType.kind) {
|
|
223
|
-
case
|
|
224
|
-
case
|
|
225
|
-
case
|
|
226
|
-
case
|
|
227
|
-
case
|
|
228
|
-
case
|
|
234
|
+
case "float":
|
|
235
|
+
case "float32":
|
|
236
|
+
case "float64":
|
|
237
|
+
case "int32":
|
|
238
|
+
case "int64":
|
|
239
|
+
case "string":
|
|
229
240
|
return this.getBuiltInType(type.wireType);
|
|
230
241
|
default:
|
|
231
|
-
throw new AdapterError(
|
|
242
|
+
throw new AdapterError("UnsupportedTsp", `unsupported duration wire format kind ${type.wireType.kind}`, type.wireType.__raw?.node);
|
|
232
243
|
}
|
|
233
244
|
}
|
|
234
|
-
case
|
|
245
|
+
case "model":
|
|
235
246
|
if (helpers.isPolymorphicRoot(type) && substituteDiscriminator) {
|
|
236
247
|
return this.getInterfaceType(type);
|
|
237
248
|
}
|
|
238
|
-
else if (helpers.isHttpFileType(type) ||
|
|
249
|
+
else if (helpers.isHttpFileType(type) ||
|
|
250
|
+
(type.baseModel && helpers.isHttpFileType(type.baseModel))) {
|
|
239
251
|
return this.getMultipartContent(false);
|
|
240
252
|
}
|
|
241
253
|
return this.getModel(type);
|
|
242
|
-
case
|
|
254
|
+
case "nullable":
|
|
243
255
|
return this.getWireType(type.type, elementTypeByValue, substituteDiscriminator);
|
|
244
256
|
default:
|
|
245
|
-
throw new AdapterError(
|
|
257
|
+
throw new AdapterError("UnsupportedTsp", `unsupported type kind ${type.kind}`, type.__raw?.node);
|
|
246
258
|
}
|
|
247
259
|
}
|
|
248
260
|
getTimeType(encode, utc) {
|
|
@@ -257,9 +269,9 @@ export class TypeAdapter {
|
|
|
257
269
|
}
|
|
258
270
|
// returns the Go code model type for an io.ReadSeekCloser
|
|
259
271
|
getReadSeekCloser(sliceOf) {
|
|
260
|
-
let keyName =
|
|
272
|
+
let keyName = "io-readseekcloser";
|
|
261
273
|
if (sliceOf) {
|
|
262
|
-
keyName =
|
|
274
|
+
keyName = "sliceof-" + keyName;
|
|
263
275
|
}
|
|
264
276
|
let rsc = this.types.get(keyName);
|
|
265
277
|
if (!rsc) {
|
|
@@ -282,12 +294,12 @@ export class TypeAdapter {
|
|
|
282
294
|
* @returns the go.MultipartContent instance
|
|
283
295
|
*/
|
|
284
296
|
getMultipartContent(sliceOf, contentType) {
|
|
285
|
-
let keyName =
|
|
297
|
+
let keyName = "streaming-multipartcontent";
|
|
286
298
|
if (contentType) {
|
|
287
299
|
keyName += `-${contentType}`;
|
|
288
300
|
}
|
|
289
301
|
if (sliceOf) {
|
|
290
|
-
keyName =
|
|
302
|
+
keyName = "sliceof-" + keyName;
|
|
291
303
|
}
|
|
292
304
|
let mpc = this.types.get(keyName);
|
|
293
305
|
if (!mpc) {
|
|
@@ -302,9 +314,9 @@ export class TypeAdapter {
|
|
|
302
314
|
}
|
|
303
315
|
getBuiltInType(type) {
|
|
304
316
|
switch (type.kind) {
|
|
305
|
-
case
|
|
317
|
+
case "unknown": {
|
|
306
318
|
if (this.codeModel.options.rawJSONAsBytes) {
|
|
307
|
-
const anyRawJSONKey =
|
|
319
|
+
const anyRawJSONKey = "any-raw-json";
|
|
308
320
|
let anyRawJSON = this.types.get(anyRawJSONKey);
|
|
309
321
|
if (anyRawJSON) {
|
|
310
322
|
return anyRawJSON;
|
|
@@ -313,104 +325,104 @@ export class TypeAdapter {
|
|
|
313
325
|
this.types.set(anyRawJSONKey, anyRawJSON);
|
|
314
326
|
return anyRawJSON;
|
|
315
327
|
}
|
|
316
|
-
let anyType = this.types.get(
|
|
328
|
+
let anyType = this.types.get("any");
|
|
317
329
|
if (anyType) {
|
|
318
330
|
return anyType;
|
|
319
331
|
}
|
|
320
332
|
anyType = new go.Any();
|
|
321
|
-
this.types.set(
|
|
333
|
+
this.types.set("any", anyType);
|
|
322
334
|
return anyType;
|
|
323
335
|
}
|
|
324
|
-
case
|
|
325
|
-
const boolKey =
|
|
336
|
+
case "boolean": {
|
|
337
|
+
const boolKey = "boolean";
|
|
326
338
|
let primitiveBool = this.types.get(boolKey);
|
|
327
339
|
if (primitiveBool) {
|
|
328
340
|
return primitiveBool;
|
|
329
341
|
}
|
|
330
|
-
primitiveBool = new go.Scalar(
|
|
342
|
+
primitiveBool = new go.Scalar("bool", type.encode === "string");
|
|
331
343
|
this.types.set(boolKey, primitiveBool);
|
|
332
344
|
return primitiveBool;
|
|
333
345
|
}
|
|
334
|
-
case
|
|
346
|
+
case "bytes":
|
|
335
347
|
return this.adaptBytesType(type);
|
|
336
|
-
case
|
|
337
|
-
const dateKey =
|
|
348
|
+
case "plainDate": {
|
|
349
|
+
const dateKey = "plainDate";
|
|
338
350
|
let date = this.types.get(dateKey);
|
|
339
351
|
if (date) {
|
|
340
352
|
return date;
|
|
341
353
|
}
|
|
342
|
-
date = new go.Time(
|
|
354
|
+
date = new go.Time("PlainDate", false);
|
|
343
355
|
this.types.set(dateKey, date);
|
|
344
356
|
return date;
|
|
345
357
|
}
|
|
346
|
-
case
|
|
347
|
-
case
|
|
348
|
-
const decimalKey =
|
|
358
|
+
case "decimal":
|
|
359
|
+
case "decimal128": {
|
|
360
|
+
const decimalKey = "float64";
|
|
349
361
|
let decimalType = this.types.get(decimalKey);
|
|
350
362
|
if (decimalType) {
|
|
351
363
|
return decimalType;
|
|
352
364
|
}
|
|
353
|
-
decimalType = new go.Scalar(decimalKey, type.encode ===
|
|
365
|
+
decimalType = new go.Scalar(decimalKey, type.encode === "string");
|
|
354
366
|
this.types.set(decimalKey, decimalType);
|
|
355
367
|
return decimalType;
|
|
356
368
|
}
|
|
357
|
-
case
|
|
358
|
-
case
|
|
359
|
-
const float32Key =
|
|
369
|
+
case "float": // C# and Java define float as 32 bits so we're following suit
|
|
370
|
+
case "float32": {
|
|
371
|
+
const float32Key = "float32";
|
|
360
372
|
let float32 = this.types.get(float32Key);
|
|
361
373
|
if (float32) {
|
|
362
374
|
return float32;
|
|
363
375
|
}
|
|
364
|
-
float32 = new go.Scalar(float32Key, type.encode ===
|
|
376
|
+
float32 = new go.Scalar(float32Key, type.encode === "string");
|
|
365
377
|
this.types.set(float32Key, float32);
|
|
366
378
|
return float32;
|
|
367
379
|
}
|
|
368
|
-
case
|
|
369
|
-
const float64Key =
|
|
380
|
+
case "float64": {
|
|
381
|
+
const float64Key = "float64";
|
|
370
382
|
let float64 = this.types.get(float64Key);
|
|
371
383
|
if (float64) {
|
|
372
384
|
return float64;
|
|
373
385
|
}
|
|
374
|
-
float64 = new go.Scalar(float64Key, type.encode ===
|
|
386
|
+
float64 = new go.Scalar(float64Key, type.encode === "string");
|
|
375
387
|
this.types.set(float64Key, float64);
|
|
376
388
|
return float64;
|
|
377
389
|
}
|
|
378
|
-
case
|
|
379
|
-
case
|
|
380
|
-
case
|
|
381
|
-
case
|
|
382
|
-
case
|
|
383
|
-
case
|
|
384
|
-
case
|
|
385
|
-
case
|
|
386
|
-
const keyName = type.encode ===
|
|
390
|
+
case "int8":
|
|
391
|
+
case "int16":
|
|
392
|
+
case "int32":
|
|
393
|
+
case "int64":
|
|
394
|
+
case "uint8":
|
|
395
|
+
case "uint16":
|
|
396
|
+
case "uint32":
|
|
397
|
+
case "uint64": {
|
|
398
|
+
const keyName = type.encode === "string" ? `${type.kind}-string` : type.kind;
|
|
387
399
|
let intType = this.types.get(keyName);
|
|
388
400
|
if (intType) {
|
|
389
401
|
return intType;
|
|
390
402
|
}
|
|
391
|
-
intType = new go.Scalar(type.kind, type.encode ===
|
|
403
|
+
intType = new go.Scalar(type.kind, type.encode === "string");
|
|
392
404
|
this.types.set(keyName, intType);
|
|
393
405
|
return intType;
|
|
394
406
|
}
|
|
395
|
-
case
|
|
396
|
-
const safeintkey = type.encode ===
|
|
407
|
+
case "safeint": {
|
|
408
|
+
const safeintkey = type.encode === "string" ? "int64-string" : "int64";
|
|
397
409
|
let int64 = this.types.get(safeintkey);
|
|
398
410
|
if (int64) {
|
|
399
411
|
return int64;
|
|
400
412
|
}
|
|
401
|
-
int64 = new go.Scalar(
|
|
413
|
+
int64 = new go.Scalar("int64", type.encode === "string");
|
|
402
414
|
this.types.set(safeintkey, int64);
|
|
403
415
|
return int64;
|
|
404
416
|
}
|
|
405
|
-
case
|
|
406
|
-
case
|
|
407
|
-
if (type.crossLanguageDefinitionId ===
|
|
417
|
+
case "string":
|
|
418
|
+
case "url": {
|
|
419
|
+
if (type.crossLanguageDefinitionId === "Azure.Core.eTag") {
|
|
408
420
|
return this.getETagType();
|
|
409
421
|
}
|
|
410
422
|
return this.getStringType();
|
|
411
423
|
}
|
|
412
|
-
case
|
|
413
|
-
const encoding =
|
|
424
|
+
case "plainTime": {
|
|
425
|
+
const encoding = "PlainTime";
|
|
414
426
|
let time = this.types.get(encoding);
|
|
415
427
|
if (time) {
|
|
416
428
|
return time;
|
|
@@ -420,20 +432,20 @@ export class TypeAdapter {
|
|
|
420
432
|
return time;
|
|
421
433
|
}
|
|
422
434
|
default:
|
|
423
|
-
throw new AdapterError(
|
|
435
|
+
throw new AdapterError("UnsupportedTsp", `unsupported type kind ${type.kind}`, type.__raw?.node);
|
|
424
436
|
}
|
|
425
437
|
}
|
|
426
438
|
// converts an SdkEnumType to a go.ConstantType
|
|
427
439
|
getConstantType(enumType) {
|
|
428
440
|
let constTypeName = helpers.getEffectiveName(enumType);
|
|
429
|
-
if (enumType.access ===
|
|
430
|
-
constTypeName = naming.getEscapedReservedName(naming.uncapitalize(constTypeName),
|
|
441
|
+
if (enumType.access === "internal") {
|
|
442
|
+
constTypeName = naming.getEscapedReservedName(naming.uncapitalize(constTypeName), "Type");
|
|
431
443
|
}
|
|
432
444
|
let constType = this.types.get(constTypeName);
|
|
433
445
|
if (constType) {
|
|
434
446
|
return constType;
|
|
435
447
|
}
|
|
436
|
-
const accessPrefix = enumType.access ===
|
|
448
|
+
const accessPrefix = enumType.access === "internal" ? "p" : "P";
|
|
437
449
|
constType = new go.Constant(this.getPkg(), constTypeName, getPrimitiveType(enumType.valueType), `${accessPrefix}ossible${constTypeName}Values`);
|
|
438
450
|
constType.values = this.getConstantValues(constType, enumType.values);
|
|
439
451
|
constType.docs.summary = enumType.summary;
|
|
@@ -442,7 +454,7 @@ export class TypeAdapter {
|
|
|
442
454
|
return constType;
|
|
443
455
|
}
|
|
444
456
|
getETagType() {
|
|
445
|
-
const etagKey =
|
|
457
|
+
const etagKey = "etag";
|
|
446
458
|
let etag = this.types.get(etagKey);
|
|
447
459
|
if (etag) {
|
|
448
460
|
return etag;
|
|
@@ -462,7 +474,7 @@ export class TypeAdapter {
|
|
|
462
474
|
getLiteral(type, value, extensibleEnum = true) {
|
|
463
475
|
let literalKey = `literal-${type.kind}`;
|
|
464
476
|
switch (type.kind) {
|
|
465
|
-
case
|
|
477
|
+
case "constant": {
|
|
466
478
|
// find the const value that matches the clientDefaultValue
|
|
467
479
|
const constantValue = type.values.find((v) => v.value === value);
|
|
468
480
|
if (constantValue) {
|
|
@@ -474,17 +486,17 @@ export class TypeAdapter {
|
|
|
474
486
|
literalKey = `${literalKey}-${type.name}`;
|
|
475
487
|
}
|
|
476
488
|
else {
|
|
477
|
-
throw new AdapterError(
|
|
489
|
+
throw new AdapterError("UnsupportedTsp", `invalid client side default ${value} for fixed enum ${type.name}`);
|
|
478
490
|
}
|
|
479
491
|
break;
|
|
480
492
|
}
|
|
481
|
-
case
|
|
493
|
+
case "encodedBytes":
|
|
482
494
|
literalKey = `${literalKey}-${type.encoding}`;
|
|
483
495
|
break;
|
|
484
|
-
case
|
|
496
|
+
case "scalar":
|
|
485
497
|
literalKey = `${literalKey}-${type.type}`;
|
|
486
498
|
break;
|
|
487
|
-
case
|
|
499
|
+
case "time":
|
|
488
500
|
literalKey = `${literalKey}-${type.format}-${type.utc}`;
|
|
489
501
|
}
|
|
490
502
|
literalKey = `${literalKey}-${value}`;
|
|
@@ -497,7 +509,7 @@ export class TypeAdapter {
|
|
|
497
509
|
}
|
|
498
510
|
/** returns a Go string type */
|
|
499
511
|
getStringType() {
|
|
500
|
-
const stringKey =
|
|
512
|
+
const stringKey = "string";
|
|
501
513
|
let stringType = this.types.get(stringKey);
|
|
502
514
|
if (!stringType) {
|
|
503
515
|
stringType = new go.String();
|
|
@@ -507,13 +519,13 @@ export class TypeAdapter {
|
|
|
507
519
|
}
|
|
508
520
|
getInterfaceType(model) {
|
|
509
521
|
if (model.name.length === 0) {
|
|
510
|
-
throw new AdapterError(
|
|
522
|
+
throw new AdapterError("InternalError", "unnamed model");
|
|
511
523
|
}
|
|
512
524
|
if (!helpers.isPolymorphicRoot(model)) {
|
|
513
|
-
throw new AdapterError(
|
|
525
|
+
throw new AdapterError("InternalError", `type ${model.name} isn't a discriminator root`, model.__raw?.node);
|
|
514
526
|
}
|
|
515
527
|
let ifaceName = naming.createPolymorphicInterfaceName(helpers.getEffectiveName(model));
|
|
516
|
-
if (model.access ===
|
|
528
|
+
if (model.access === "internal") {
|
|
517
529
|
ifaceName = naming.uncapitalize(ifaceName);
|
|
518
530
|
}
|
|
519
531
|
let iface = this.types.get(ifaceName);
|
|
@@ -523,14 +535,14 @@ export class TypeAdapter {
|
|
|
523
535
|
// find the discriminator field
|
|
524
536
|
let discriminatorField;
|
|
525
537
|
for (const prop of model.properties) {
|
|
526
|
-
if (prop.kind ===
|
|
538
|
+
if (prop.kind === "property" && prop.discriminator) {
|
|
527
539
|
// only json support discriminator type
|
|
528
540
|
discriminatorField = prop.serializationOptions.json?.name;
|
|
529
541
|
break;
|
|
530
542
|
}
|
|
531
543
|
}
|
|
532
544
|
if (!discriminatorField) {
|
|
533
|
-
throw new AdapterError(
|
|
545
|
+
throw new AdapterError("InternalError", `failed to find discriminator field for type ${model.name}`);
|
|
534
546
|
}
|
|
535
547
|
iface = new go.Interface(this.getPkg(), ifaceName, discriminatorField);
|
|
536
548
|
if (model.baseModel && helpers.isPolymorphicRoot(model.baseModel)) {
|
|
@@ -542,8 +554,8 @@ export class TypeAdapter {
|
|
|
542
554
|
// converts an SdkModelType to a go.ModelType or go.PolymorphicType if the model is polymorphic
|
|
543
555
|
getModel(model) {
|
|
544
556
|
let modelName = helpers.getEffectiveName(model);
|
|
545
|
-
if (model.access ===
|
|
546
|
-
modelName = naming.getEscapedReservedName(naming.uncapitalize(modelName),
|
|
557
|
+
if (model.access === "internal") {
|
|
558
|
+
modelName = naming.getEscapedReservedName(naming.uncapitalize(modelName), "Model");
|
|
547
559
|
}
|
|
548
560
|
let modelType = this.types.get(modelName);
|
|
549
561
|
if (modelType) {
|
|
@@ -557,16 +569,16 @@ export class TypeAdapter {
|
|
|
557
569
|
usage |= go.UsageFlags.Output;
|
|
558
570
|
}
|
|
559
571
|
let omitSerde = false;
|
|
560
|
-
const omitValue = helpers.getClientOption(
|
|
572
|
+
const omitValue = helpers.getClientOption("omitSerdeMethods", model, this.ctx.program);
|
|
561
573
|
if (omitValue) {
|
|
562
574
|
switch (omitValue) {
|
|
563
|
-
case
|
|
575
|
+
case "all":
|
|
564
576
|
omitSerde = true;
|
|
565
577
|
break;
|
|
566
578
|
default:
|
|
567
579
|
this.ctx.program.reportDiagnostic({
|
|
568
|
-
code:
|
|
569
|
-
severity:
|
|
580
|
+
code: "InvalidClientOption",
|
|
581
|
+
severity: "warning",
|
|
570
582
|
message: `invalid omitSerdeMethods value ${omitValue} on model ${model.name}`,
|
|
571
583
|
target: model.__raw?.node ?? tsp.NoTarget,
|
|
572
584
|
});
|
|
@@ -591,13 +603,13 @@ export class TypeAdapter {
|
|
|
591
603
|
parent = parent.baseModel;
|
|
592
604
|
}
|
|
593
605
|
if (!iface) {
|
|
594
|
-
throw new AdapterError(
|
|
606
|
+
throw new AdapterError("InternalError", `failed to find discriminator interface name for type ${model.name}`);
|
|
595
607
|
}
|
|
596
608
|
}
|
|
597
609
|
if (model.discriminatorValue) {
|
|
598
610
|
// find the discriminator property and create the discriminator literal based on it
|
|
599
611
|
for (const prop of model.properties) {
|
|
600
|
-
if (prop.kind ===
|
|
612
|
+
if (prop.kind === "property" && prop.discriminator) {
|
|
601
613
|
discriminatorLiteral = this.getDiscriminatorLiteral(prop);
|
|
602
614
|
break;
|
|
603
615
|
}
|
|
@@ -633,11 +645,11 @@ export class TypeAdapter {
|
|
|
633
645
|
}
|
|
634
646
|
getDiscriminatorLiteral(sdkProp) {
|
|
635
647
|
switch (sdkProp.type.kind) {
|
|
636
|
-
case
|
|
637
|
-
case
|
|
648
|
+
case "constant":
|
|
649
|
+
case "enumvalue":
|
|
638
650
|
return this.getLiteralValue(sdkProp.type);
|
|
639
651
|
default:
|
|
640
|
-
throw new AdapterError(
|
|
652
|
+
throw new AdapterError("UnsupportedTsp", `unsupported type kind ${sdkProp.type.kind} for discriminator property ${sdkProp.name}`, sdkProp.__raw?.node);
|
|
641
653
|
}
|
|
642
654
|
}
|
|
643
655
|
getModelField(prop, modelType) {
|
|
@@ -646,17 +658,20 @@ export class TypeAdapter {
|
|
|
646
658
|
// don't have to deal with JSON patch shenanigans. only the optional fields will be pointer-to-type.
|
|
647
659
|
const isMultipartFormData = (modelType.usage & tcgc.UsageFlags.MultipartFormData) !== 0;
|
|
648
660
|
let fieldByValue = isMultipartFormData ? true : helpers.isTypePassedByValue(prop.type);
|
|
649
|
-
if (isMultipartFormData && prop.kind ===
|
|
661
|
+
if (isMultipartFormData && prop.kind === "property" && prop.optional) {
|
|
650
662
|
fieldByValue = false;
|
|
651
663
|
}
|
|
652
664
|
let type = this.getWireType(prop.type, isMultipartFormData, true);
|
|
653
|
-
if (prop.kind ===
|
|
665
|
+
if (prop.kind === "property") {
|
|
654
666
|
if (prop.serializationOptions.multipart?.isFilePart) {
|
|
655
667
|
// for file parts, check if the tsp defines a fixed content type
|
|
656
668
|
// (e.g. HttpPart<File<"image/png">>). if so, bake it into the MultipartContent type.
|
|
657
669
|
const multipartOpts = prop.serializationOptions.multipart;
|
|
658
|
-
const fixedContentType = multipartOpts?.contentType?.type.kind ===
|
|
659
|
-
|
|
670
|
+
const fixedContentType = multipartOpts?.contentType?.type.kind === "constant" &&
|
|
671
|
+
multipartOpts.defaultContentTypes.length === 1
|
|
672
|
+
? multipartOpts.defaultContentTypes[0]
|
|
673
|
+
: undefined;
|
|
674
|
+
type = this.getMultipartContent(prop.type.kind === "array", fixedContentType);
|
|
660
675
|
}
|
|
661
676
|
if (prop.visibility) {
|
|
662
677
|
// the field is read-only IFF the only visibility attribute present is Read.
|
|
@@ -679,7 +694,9 @@ export class TypeAdapter {
|
|
|
679
694
|
// e.g. /typespec-go/test/tsp/HardwareSecurityModules.Management/CloudHsmCluster.tsp#L99-L105
|
|
680
695
|
serializedName = prop.serializedName;
|
|
681
696
|
}
|
|
682
|
-
const fieldName = prop.isExactName
|
|
697
|
+
const fieldName = prop.isExactName
|
|
698
|
+
? prop.name
|
|
699
|
+
: naming.capitalize(naming.ensureNameCase(prop.name));
|
|
683
700
|
const field = new go.ModelField(fieldName, type, fieldByValue, serializedName, annotations);
|
|
684
701
|
field.docs.summary = prop.summary;
|
|
685
702
|
field.docs.description = prop.doc;
|
|
@@ -691,7 +708,7 @@ export class TypeAdapter {
|
|
|
691
708
|
}
|
|
692
709
|
else if (prop.clientDefaultValue) {
|
|
693
710
|
if (!go.isLiteralValueType(type)) {
|
|
694
|
-
throw new AdapterError(
|
|
711
|
+
throw new AdapterError("InternalError", `unexpected client side default kind ${type.kind} for field ${field.name}`, prop.__raw?.node);
|
|
695
712
|
}
|
|
696
713
|
field.defaultValue = this.getLiteral(type, prop.clientDefaultValue, helpers.isExtensibleEnum(prop.type));
|
|
697
714
|
if (!field.docs.summary && !field.docs.description) {
|
|
@@ -704,7 +721,7 @@ export class TypeAdapter {
|
|
|
704
721
|
type: type,
|
|
705
722
|
xml: prop.serializationOptions.xml,
|
|
706
723
|
});
|
|
707
|
-
if (helpers.hasDecorator(
|
|
724
|
+
if (helpers.hasDecorator("@deserializeEmptyStringAsNull", prop.decorators)) {
|
|
708
725
|
field.annotations.unmarshalEmptyStringAsNil = true;
|
|
709
726
|
}
|
|
710
727
|
// it's possible for different models to reference the same property definition
|
|
@@ -717,8 +734,8 @@ export class TypeAdapter {
|
|
|
717
734
|
const values = new Array();
|
|
718
735
|
for (const valueType of valueTypes) {
|
|
719
736
|
let valueTypeName = `${type.name}${helpers.getEffectiveName(valueType)}`;
|
|
720
|
-
if (valueType.enumType.access ===
|
|
721
|
-
valueTypeName = naming.getEscapedReservedName(naming.uncapitalize(valueTypeName),
|
|
737
|
+
if (valueType.enumType.access === "internal") {
|
|
738
|
+
valueTypeName = naming.getEscapedReservedName(naming.uncapitalize(valueTypeName), "Type");
|
|
722
739
|
}
|
|
723
740
|
if (this.constValues.has(valueTypeName)) {
|
|
724
741
|
// we have a type name collision. while tsp will prevent this
|
|
@@ -732,7 +749,7 @@ export class TypeAdapter {
|
|
|
732
749
|
// "ApplicationJSON".
|
|
733
750
|
// instead of being clever, report a NameCollision diagnostic so
|
|
734
751
|
// that the tsp author can define the desired names.
|
|
735
|
-
throw new AdapterError(
|
|
752
|
+
throw new AdapterError("NameCollision", `enum value ${valueType.name} was renamed to ${valueTypeName} which collides with an existing value`, valueType.__raw?.node);
|
|
736
753
|
}
|
|
737
754
|
const value = new go.ConstantValue(valueTypeName, type, valueType.value);
|
|
738
755
|
value.docs.summary = valueType.summary;
|
|
@@ -743,9 +760,9 @@ export class TypeAdapter {
|
|
|
743
760
|
return values;
|
|
744
761
|
}
|
|
745
762
|
adaptBytesType(sdkType) {
|
|
746
|
-
let format =
|
|
747
|
-
if (sdkType.encode ===
|
|
748
|
-
format =
|
|
763
|
+
let format = "Std";
|
|
764
|
+
if (sdkType.encode === "base64url") {
|
|
765
|
+
format = "URL";
|
|
749
766
|
}
|
|
750
767
|
const keyName = `bytes-${format}`;
|
|
751
768
|
let bytesType = this.types.get(keyName);
|
|
@@ -757,7 +774,7 @@ export class TypeAdapter {
|
|
|
757
774
|
return bytesType;
|
|
758
775
|
}
|
|
759
776
|
getLiteralValue(constType) {
|
|
760
|
-
if (constType.kind ===
|
|
777
|
+
if (constType.kind === "enumvalue") {
|
|
761
778
|
const goConstType = this.getConstantType(constType.enumType);
|
|
762
779
|
// find the matching enum value
|
|
763
780
|
let goConstValue;
|
|
@@ -768,7 +785,7 @@ export class TypeAdapter {
|
|
|
768
785
|
}
|
|
769
786
|
}
|
|
770
787
|
if (!goConstValue) {
|
|
771
|
-
throw new AdapterError(
|
|
788
|
+
throw new AdapterError("InternalError", `failed to find const value for ${constType.value} in const ${goConstType.name}`, constType.__raw?.node);
|
|
772
789
|
}
|
|
773
790
|
const keyName = `literal-${goConstValue.name}`;
|
|
774
791
|
let literalConst = this.types.get(keyName);
|
|
@@ -777,24 +794,24 @@ export class TypeAdapter {
|
|
|
777
794
|
}
|
|
778
795
|
const constValue = this.constValues.get(goConstValue.name);
|
|
779
796
|
if (!constValue) {
|
|
780
|
-
throw new AdapterError(
|
|
797
|
+
throw new AdapterError("InternalError", `failed to find const value for ${constType.name} in enum ${constType.enumType.name}`, constType.__raw?.node);
|
|
781
798
|
}
|
|
782
799
|
literalConst = new go.Literal(this.getConstantType(constType.enumType), constValue);
|
|
783
800
|
this.types.set(keyName, literalConst);
|
|
784
801
|
return literalConst;
|
|
785
802
|
}
|
|
786
803
|
switch (constType.valueType.kind) {
|
|
787
|
-
case
|
|
804
|
+
case "boolean": {
|
|
788
805
|
const keyName = `literal-boolean-${constType.value}`;
|
|
789
806
|
let literalBool = this.types.get(keyName);
|
|
790
807
|
if (literalBool) {
|
|
791
808
|
return literalBool;
|
|
792
809
|
}
|
|
793
|
-
literalBool = new go.Literal(new go.Scalar(
|
|
810
|
+
literalBool = new go.Literal(new go.Scalar("bool", false), constType.value);
|
|
794
811
|
this.types.set(keyName, literalBool);
|
|
795
812
|
return literalBool;
|
|
796
813
|
}
|
|
797
|
-
case
|
|
814
|
+
case "bytes": {
|
|
798
815
|
const keyName = `literal-bytes-${constType.value}`;
|
|
799
816
|
let literalByteArray = this.types.get(keyName);
|
|
800
817
|
if (literalByteArray) {
|
|
@@ -804,14 +821,14 @@ export class TypeAdapter {
|
|
|
804
821
|
this.types.set(keyName, literalByteArray);
|
|
805
822
|
return literalByteArray;
|
|
806
823
|
}
|
|
807
|
-
case
|
|
808
|
-
case
|
|
824
|
+
case "decimal":
|
|
825
|
+
case "decimal128": {
|
|
809
826
|
const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
|
|
810
827
|
let literalDecimal = this.types.get(keyName);
|
|
811
828
|
if (literalDecimal) {
|
|
812
829
|
return literalDecimal;
|
|
813
830
|
}
|
|
814
|
-
literalDecimal = new go.Literal(new go.Scalar(
|
|
831
|
+
literalDecimal = new go.Literal(new go.Scalar("float64", false), constType.value);
|
|
815
832
|
this.types.set(keyName, literalDecimal);
|
|
816
833
|
return literalDecimal;
|
|
817
834
|
}
|
|
@@ -828,14 +845,14 @@ export class TypeAdapter {
|
|
|
828
845
|
this.types.set(keyName, literalTime);
|
|
829
846
|
return literalTime;
|
|
830
847
|
}*/
|
|
831
|
-
case
|
|
832
|
-
case
|
|
833
|
-
case
|
|
834
|
-
case
|
|
835
|
-
case
|
|
836
|
-
case
|
|
837
|
-
case
|
|
838
|
-
case
|
|
848
|
+
case "int8":
|
|
849
|
+
case "int16":
|
|
850
|
+
case "int32":
|
|
851
|
+
case "int64":
|
|
852
|
+
case "uint8":
|
|
853
|
+
case "uint16":
|
|
854
|
+
case "uint32":
|
|
855
|
+
case "uint64": {
|
|
839
856
|
const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
|
|
840
857
|
let literalInt = this.types.get(keyName);
|
|
841
858
|
if (literalInt) {
|
|
@@ -845,8 +862,8 @@ export class TypeAdapter {
|
|
|
845
862
|
this.types.set(keyName, literalInt);
|
|
846
863
|
return literalInt;
|
|
847
864
|
}
|
|
848
|
-
case
|
|
849
|
-
case
|
|
865
|
+
case "float32":
|
|
866
|
+
case "float64": {
|
|
850
867
|
const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
|
|
851
868
|
let literalFloat = this.types.get(keyName);
|
|
852
869
|
if (literalFloat) {
|
|
@@ -856,8 +873,8 @@ export class TypeAdapter {
|
|
|
856
873
|
this.types.set(keyName, literalFloat);
|
|
857
874
|
return literalFloat;
|
|
858
875
|
}
|
|
859
|
-
case
|
|
860
|
-
case
|
|
876
|
+
case "string":
|
|
877
|
+
case "url": {
|
|
861
878
|
const keyName = `literal-string-${constType.value}`;
|
|
862
879
|
let literalString = this.types.get(keyName);
|
|
863
880
|
if (literalString) {
|
|
@@ -868,63 +885,63 @@ export class TypeAdapter {
|
|
|
868
885
|
return literalString;
|
|
869
886
|
}
|
|
870
887
|
default:
|
|
871
|
-
throw new AdapterError(
|
|
888
|
+
throw new AdapterError("UnsupportedTsp", `unsupported kind ${constType.valueType.kind} for LiteralValue`, constType.valueType.__raw?.node);
|
|
872
889
|
}
|
|
873
890
|
// TODO: tcgc doesn't support duration as a literal value
|
|
874
891
|
}
|
|
875
892
|
}
|
|
876
893
|
function getPrimitiveType(type) {
|
|
877
894
|
switch (type.kind) {
|
|
878
|
-
case
|
|
879
|
-
return
|
|
880
|
-
case
|
|
881
|
-
case
|
|
882
|
-
case
|
|
883
|
-
case
|
|
884
|
-
case
|
|
895
|
+
case "boolean":
|
|
896
|
+
return "bool";
|
|
897
|
+
case "float32":
|
|
898
|
+
case "float64":
|
|
899
|
+
case "int32":
|
|
900
|
+
case "int64":
|
|
901
|
+
case "string":
|
|
885
902
|
return type.kind;
|
|
886
903
|
default:
|
|
887
|
-
throw new AdapterError(
|
|
904
|
+
throw new AdapterError("UnsupportedTsp", `unhandled tcgc.SdkBuiltInKinds: ${type.kind}`, type.__raw?.node);
|
|
888
905
|
}
|
|
889
906
|
}
|
|
890
907
|
function getDateTimeEncoding(encoding) {
|
|
891
908
|
switch (encoding) {
|
|
892
|
-
case
|
|
893
|
-
return
|
|
894
|
-
case
|
|
895
|
-
return
|
|
896
|
-
case
|
|
897
|
-
return
|
|
909
|
+
case "rfc3339":
|
|
910
|
+
return "RFC3339";
|
|
911
|
+
case "rfc7231":
|
|
912
|
+
return "RFC7231";
|
|
913
|
+
case "unixTimestamp":
|
|
914
|
+
return "Unix";
|
|
898
915
|
default:
|
|
899
|
-
throw new AdapterError(
|
|
916
|
+
throw new AdapterError("UnsupportedTsp", `unsupported date time encoding ${encoding}`);
|
|
900
917
|
}
|
|
901
918
|
}
|
|
902
919
|
function recursiveKeyName(root, obj, substituteDiscriminator) {
|
|
903
920
|
switch (obj.kind) {
|
|
904
|
-
case
|
|
921
|
+
case "array":
|
|
905
922
|
return recursiveKeyName(`${root}-array`, obj.valueType, substituteDiscriminator);
|
|
906
|
-
case
|
|
923
|
+
case "enum":
|
|
907
924
|
return `${root}-${obj.name}`;
|
|
908
|
-
case
|
|
925
|
+
case "enumvalue":
|
|
909
926
|
return `${root}-${obj.enumType.name}-${obj.value}`;
|
|
910
|
-
case
|
|
927
|
+
case "dict":
|
|
911
928
|
return recursiveKeyName(`${root}-dict`, obj.valueType, substituteDiscriminator);
|
|
912
|
-
case
|
|
929
|
+
case "plainDate":
|
|
913
930
|
return `${root}-dateType`;
|
|
914
|
-
case
|
|
931
|
+
case "utcDateTime":
|
|
915
932
|
return `${root}-${getDateTimeEncoding(obj.encode)}`;
|
|
916
|
-
case
|
|
933
|
+
case "duration":
|
|
917
934
|
return `${root}-${obj.wireType.kind}`;
|
|
918
|
-
case
|
|
935
|
+
case "model":
|
|
919
936
|
if (substituteDiscriminator) {
|
|
920
937
|
return `${root}-${naming.createPolymorphicInterfaceName(obj.name)}`;
|
|
921
938
|
}
|
|
922
939
|
return `${root}-${obj.name}`;
|
|
923
|
-
case
|
|
940
|
+
case "nullable":
|
|
924
941
|
return recursiveKeyName(root, obj.type, substituteDiscriminator);
|
|
925
|
-
case
|
|
926
|
-
if (obj.encode !==
|
|
927
|
-
throw new AdapterError(
|
|
942
|
+
case "plainTime":
|
|
943
|
+
if (obj.encode !== "rfc3339") {
|
|
944
|
+
throw new AdapterError("UnsupportedTsp", `unsupported time encoding ${obj.encode}`, obj.__raw?.node);
|
|
928
945
|
}
|
|
929
946
|
return `${root}-timeRFC3339`;
|
|
930
947
|
default:
|