@azure-tools/typespec-go 0.8.6 → 0.8.8
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/dist/codegen.go/src/core/clientFactory.d.ts +12 -0
- package/dist/codegen.go/src/core/clientFactory.d.ts.map +1 -0
- package/dist/codegen.go/src/{clientFactory.js → core/clientFactory.js} +21 -13
- package/dist/codegen.go/src/core/clientFactory.js.map +1 -0
- package/dist/codegen.go/src/core/cloudConfig.d.ts +11 -0
- package/dist/codegen.go/src/core/cloudConfig.d.ts.map +1 -0
- package/dist/codegen.go/src/{cloudConfig.js → core/cloudConfig.js} +7 -15
- package/dist/codegen.go/src/core/cloudConfig.js.map +1 -0
- package/dist/codegen.go/src/core/constants.d.ts +9 -0
- package/dist/codegen.go/src/core/constants.d.ts.map +1 -0
- package/dist/codegen.go/src/{constants.js → core/constants.js} +10 -5
- package/dist/codegen.go/src/core/constants.js.map +1 -0
- package/dist/codegen.go/src/{errors.d.ts → core/errors.d.ts} +1 -1
- package/dist/codegen.go/src/core/errors.d.ts.map +1 -0
- package/dist/codegen.go/src/core/errors.js.map +1 -0
- package/dist/codegen.go/src/core/example.d.ts +16 -0
- package/dist/codegen.go/src/core/example.d.ts.map +1 -0
- package/dist/codegen.go/src/{example.js → core/example.js} +78 -47
- package/dist/codegen.go/src/core/example.js.map +1 -0
- package/dist/codegen.go/src/core/gomod.d.ts +12 -0
- package/dist/codegen.go/src/core/gomod.d.ts.map +1 -0
- package/dist/codegen.go/src/{gomod.js → core/gomod.js} +14 -11
- package/dist/codegen.go/src/core/gomod.js.map +1 -0
- package/dist/codegen.go/src/{helpers.d.ts → core/helpers.d.ts} +14 -10
- package/dist/codegen.go/src/core/helpers.d.ts.map +1 -0
- package/dist/codegen.go/src/{helpers.js → core/helpers.js} +40 -48
- package/dist/codegen.go/src/core/helpers.js.map +1 -0
- package/dist/codegen.go/src/core/imports.d.ts +53 -0
- package/dist/codegen.go/src/core/imports.d.ts.map +1 -0
- package/dist/codegen.go/src/core/imports.js +140 -0
- package/dist/codegen.go/src/core/imports.js.map +1 -0
- package/dist/codegen.go/src/core/interfaces.d.ts +9 -0
- package/dist/codegen.go/src/core/interfaces.d.ts.map +1 -0
- package/dist/codegen.go/src/{interfaces.js → core/interfaces.js} +10 -5
- package/dist/codegen.go/src/core/interfaces.js.map +1 -0
- package/dist/codegen.go/src/core/license.d.ts +9 -0
- package/dist/codegen.go/src/core/license.d.ts.map +1 -0
- package/dist/codegen.go/src/{license.js → core/license.js} +4 -13
- package/dist/codegen.go/src/core/license.js.map +1 -0
- package/dist/codegen.go/src/core/metadata.d.ts +3 -0
- package/dist/codegen.go/src/core/metadata.d.ts.map +1 -0
- package/dist/codegen.go/src/core/metadata.js.map +1 -0
- package/dist/codegen.go/src/core/models.d.ts +14 -0
- package/dist/codegen.go/src/core/models.d.ts.map +1 -0
- package/dist/codegen.go/src/{models.js → core/models.js} +177 -92
- package/dist/codegen.go/src/core/models.js.map +1 -0
- package/dist/codegen.go/src/core/operations.d.ts +17 -0
- package/dist/codegen.go/src/core/operations.d.ts.map +1 -0
- package/dist/codegen.go/src/{operations.js → core/operations.js} +51 -44
- package/dist/codegen.go/src/core/operations.js.map +1 -0
- package/dist/codegen.go/src/core/options.d.ts +9 -0
- package/dist/codegen.go/src/core/options.d.ts.map +1 -0
- package/dist/codegen.go/src/{options.js → core/options.js} +24 -11
- package/dist/codegen.go/src/core/options.js.map +1 -0
- package/dist/codegen.go/src/core/polymorphics.d.ts +9 -0
- package/dist/codegen.go/src/core/polymorphics.d.ts.map +1 -0
- package/dist/codegen.go/src/{polymorphics.js → core/polymorphics.js} +21 -14
- package/dist/codegen.go/src/core/polymorphics.js.map +1 -0
- package/dist/codegen.go/src/core/responses.d.ts +14 -0
- package/dist/codegen.go/src/core/responses.d.ts.map +1 -0
- package/dist/codegen.go/src/{responses.js → core/responses.js} +46 -17
- package/dist/codegen.go/src/core/responses.js.map +1 -0
- package/dist/codegen.go/src/core/time.d.ts +14 -0
- package/dist/codegen.go/src/core/time.d.ts.map +1 -0
- package/dist/codegen.go/src/{time.js → core/time.js} +65 -27
- package/dist/codegen.go/src/core/time.js.map +1 -0
- package/dist/codegen.go/src/core/version.d.ts +10 -0
- package/dist/codegen.go/src/core/version.d.ts.map +1 -0
- package/dist/codegen.go/src/{version.js → core/version.js} +4 -12
- package/dist/codegen.go/src/core/version.js.map +1 -0
- package/dist/codegen.go/src/core/xmlAdditionalProps.d.ts +9 -0
- package/dist/codegen.go/src/core/xmlAdditionalProps.d.ts.map +1 -0
- package/dist/codegen.go/src/{xmlAdditionalProps.js → core/xmlAdditionalProps.js} +12 -8
- package/dist/codegen.go/src/core/xmlAdditionalProps.js.map +1 -0
- package/dist/codegen.go/src/emitter.d.ts +42 -0
- package/dist/codegen.go/src/emitter.d.ts.map +1 -0
- package/dist/codegen.go/src/emitter.js +291 -0
- package/dist/codegen.go/src/emitter.js.map +1 -0
- package/dist/codegen.go/src/fake/factory.d.ts +8 -1
- package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/factory.js +19 -10
- package/dist/codegen.go/src/fake/factory.js.map +1 -1
- package/dist/codegen.go/src/fake/internal.d.ts +8 -1
- package/dist/codegen.go/src/fake/internal.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/internal.js +13 -6
- package/dist/codegen.go/src/fake/internal.js.map +1 -1
- package/dist/codegen.go/src/fake/servers.d.ts +7 -1
- package/dist/codegen.go/src/fake/servers.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/servers.js +141 -84
- package/dist/codegen.go/src/fake/servers.js.map +1 -1
- package/dist/codegen.go/src/index.d.ts +4 -0
- package/dist/codegen.go/src/index.d.ts.map +1 -0
- package/dist/codegen.go/src/index.js +8 -0
- package/dist/codegen.go/src/index.js.map +1 -0
- package/dist/codemodel.go/src/client.d.ts +13 -5
- package/dist/codemodel.go/src/client.d.ts.map +1 -1
- package/dist/codemodel.go/src/client.js +9 -5
- package/dist/codemodel.go/src/client.js.map +1 -1
- package/dist/codemodel.go/src/{package.d.ts → codeModel.d.ts} +11 -35
- package/dist/codemodel.go/src/codeModel.d.ts.map +1 -0
- package/dist/codemodel.go/src/codeModel.js +29 -0
- package/dist/codemodel.go/src/codeModel.js.map +1 -0
- package/dist/codemodel.go/src/index.d.ts +3 -2
- package/dist/codemodel.go/src/index.d.ts.map +1 -1
- package/dist/codemodel.go/src/index.js +3 -2
- package/dist/codemodel.go/src/index.js.map +1 -1
- package/dist/codemodel.go/src/module.d.ts +99 -0
- package/dist/codemodel.go/src/module.d.ts.map +1 -0
- package/dist/codemodel.go/src/module.js +75 -0
- package/dist/codemodel.go/src/module.js.map +1 -0
- package/dist/codemodel.go/src/param.d.ts +4 -1
- package/dist/codemodel.go/src/param.d.ts.map +1 -1
- package/dist/codemodel.go/src/param.js +2 -1
- package/dist/codemodel.go/src/param.js.map +1 -1
- package/dist/codemodel.go/src/result.d.ts +1 -0
- package/dist/codemodel.go/src/result.d.ts.map +1 -1
- package/dist/codemodel.go/src/result.js +1 -0
- package/dist/codemodel.go/src/result.js.map +1 -1
- package/dist/codemodel.go/src/type.d.ts +23 -13
- package/dist/codemodel.go/src/type.d.ts.map +1 -1
- package/dist/codemodel.go/src/type.js +50 -28
- package/dist/codemodel.go/src/type.js.map +1 -1
- package/dist/typespec-go/src/emitter.d.ts.map +1 -1
- package/dist/typespec-go/src/emitter.js +39 -168
- package/dist/typespec-go/src/emitter.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.d.ts +23 -2
- package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js +98 -68
- package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts +18 -9
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.js +160 -110
- package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/errors.d.ts +1 -1
- package/dist/typespec-go/src/tcgcadapter/errors.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/errors.js +2 -1
- package/dist/typespec-go/src/tcgcadapter/errors.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.d.ts +18 -4
- package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.js +50 -36
- package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
- package/package.json +26 -26
- package/dist/codegen.go/src/clientFactory.d.ts +0 -3
- package/dist/codegen.go/src/clientFactory.d.ts.map +0 -1
- package/dist/codegen.go/src/clientFactory.js.map +0 -1
- package/dist/codegen.go/src/cloudConfig.d.ts +0 -10
- package/dist/codegen.go/src/cloudConfig.d.ts.map +0 -1
- package/dist/codegen.go/src/cloudConfig.js.map +0 -1
- package/dist/codegen.go/src/constants.d.ts +0 -3
- package/dist/codegen.go/src/constants.d.ts.map +0 -1
- package/dist/codegen.go/src/constants.js.map +0 -1
- package/dist/codegen.go/src/errors.d.ts.map +0 -1
- package/dist/codegen.go/src/errors.js.map +0 -1
- package/dist/codegen.go/src/example.d.ts +0 -8
- package/dist/codegen.go/src/example.d.ts.map +0 -1
- package/dist/codegen.go/src/example.js.map +0 -1
- package/dist/codegen.go/src/gomod.d.ts +0 -3
- package/dist/codegen.go/src/gomod.d.ts.map +0 -1
- package/dist/codegen.go/src/gomod.js.map +0 -1
- package/dist/codegen.go/src/helpers.d.ts.map +0 -1
- package/dist/codegen.go/src/helpers.js.map +0 -1
- package/dist/codegen.go/src/imports.d.ts +0 -11
- package/dist/codegen.go/src/imports.d.ts.map +0 -1
- package/dist/codegen.go/src/imports.js +0 -65
- package/dist/codegen.go/src/imports.js.map +0 -1
- package/dist/codegen.go/src/interfaces.d.ts +0 -3
- package/dist/codegen.go/src/interfaces.d.ts.map +0 -1
- package/dist/codegen.go/src/interfaces.js.map +0 -1
- package/dist/codegen.go/src/license.d.ts +0 -10
- package/dist/codegen.go/src/license.d.ts.map +0 -1
- package/dist/codegen.go/src/license.js.map +0 -1
- package/dist/codegen.go/src/metadata.d.ts +0 -3
- package/dist/codegen.go/src/metadata.d.ts.map +0 -1
- package/dist/codegen.go/src/metadata.js.map +0 -1
- package/dist/codegen.go/src/models.d.ts +0 -8
- package/dist/codegen.go/src/models.d.ts.map +0 -1
- package/dist/codegen.go/src/models.js.map +0 -1
- package/dist/codegen.go/src/operations.d.ts +0 -9
- package/dist/codegen.go/src/operations.d.ts.map +0 -1
- package/dist/codegen.go/src/operations.js.map +0 -1
- package/dist/codegen.go/src/options.d.ts +0 -3
- package/dist/codegen.go/src/options.d.ts.map +0 -1
- package/dist/codegen.go/src/options.js.map +0 -1
- package/dist/codegen.go/src/polymorphics.d.ts +0 -3
- package/dist/codegen.go/src/polymorphics.d.ts.map +0 -1
- package/dist/codegen.go/src/polymorphics.js.map +0 -1
- package/dist/codegen.go/src/responses.d.ts +0 -7
- package/dist/codegen.go/src/responses.d.ts.map +0 -1
- package/dist/codegen.go/src/responses.js.map +0 -1
- package/dist/codegen.go/src/time.d.ts +0 -8
- package/dist/codegen.go/src/time.d.ts.map +0 -1
- package/dist/codegen.go/src/time.js.map +0 -1
- package/dist/codegen.go/src/version.d.ts +0 -10
- package/dist/codegen.go/src/version.d.ts.map +0 -1
- package/dist/codegen.go/src/version.js.map +0 -1
- package/dist/codegen.go/src/xmlAdditionalProps.d.ts +0 -3
- package/dist/codegen.go/src/xmlAdditionalProps.d.ts.map +0 -1
- package/dist/codegen.go/src/xmlAdditionalProps.js.map +0 -1
- package/dist/codemodel.go/src/package.d.ts.map +0 -1
- package/dist/codemodel.go/src/package.js +0 -78
- package/dist/codemodel.go/src/package.js.map +0 -1
- /package/dist/codegen.go/src/{errors.js → core/errors.js} +0 -0
- /package/dist/codegen.go/src/{metadata.js → core/metadata.js} +0 -0
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { camelCase, capitalize, uncapitalize } from '@azure-tools/codegen';
|
|
6
6
|
import { values } from '@azure-tools/linq';
|
|
7
7
|
import * as go from '../../../codemodel.go/src/index.js';
|
|
8
|
-
import * as helpers from '../helpers.js';
|
|
9
|
-
import { ImportManager } from '../imports.js';
|
|
10
|
-
import { fixUpMethodName } from '../operations.js';
|
|
8
|
+
import * as helpers from '../core/helpers.js';
|
|
9
|
+
import { ImportManager } from '../core/imports.js';
|
|
10
|
+
import { fixUpMethodName } from '../core/operations.js';
|
|
11
11
|
import { generateServerInternal, RequiredHelpers } from './internal.js';
|
|
12
|
-
import { CodegenError } from '../errors.js';
|
|
12
|
+
import { CodegenError } from '../core/errors.js';
|
|
13
13
|
// contains the generated content for all servers and the required helpers
|
|
14
14
|
export class ServerContent {
|
|
15
15
|
servers;
|
|
@@ -34,16 +34,21 @@ export function getServerName(client) {
|
|
|
34
34
|
// for the fake server, we use the suffix Server instead of Client
|
|
35
35
|
return capitalize(client.name.replace(/[C|c]lient$/, 'Server'));
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Generates the contents for the *_server.go files.
|
|
39
|
+
*
|
|
40
|
+
* @param pkg contains the package content
|
|
41
|
+
* @returns the contents to generate or an empty object
|
|
42
|
+
*/
|
|
43
|
+
export function generateServers(pkg) {
|
|
38
44
|
const operations = new Array();
|
|
39
|
-
const
|
|
40
|
-
for (const client of values(codeModel.clients)) {
|
|
45
|
+
for (const client of values(pkg.parent.clients)) {
|
|
41
46
|
if (client.clientAccessors.length === 0 && values(client.methods).all(method => { return helpers.isMethodInternal(method); })) {
|
|
42
47
|
// client has no client accessors and no exported methods, skip it
|
|
43
48
|
continue;
|
|
44
49
|
}
|
|
45
50
|
// the list of packages to import
|
|
46
|
-
const imports = new ImportManager();
|
|
51
|
+
const imports = new ImportManager(pkg);
|
|
47
52
|
// add standard imports
|
|
48
53
|
imports.add('errors');
|
|
49
54
|
imports.add('fmt');
|
|
@@ -51,7 +56,7 @@ export async function generateServers(codeModel) {
|
|
|
51
56
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime');
|
|
52
57
|
const serverName = getServerName(client);
|
|
53
58
|
let content;
|
|
54
|
-
content = `// ${serverName} is a fake server for instances of the ${
|
|
59
|
+
content = `// ${serverName} is a fake server for instances of the ${go.getTypeDeclaration(client, pkg)} type.\n`;
|
|
55
60
|
content += `type ${serverName} struct{\n`;
|
|
56
61
|
// we might remove some operations from the list
|
|
57
62
|
const finalMethods = new Array();
|
|
@@ -79,17 +84,17 @@ export async function generateServers(codeModel) {
|
|
|
79
84
|
switch (method.kind) {
|
|
80
85
|
case 'lroMethod':
|
|
81
86
|
case 'lroPageableMethod':
|
|
82
|
-
let respType =
|
|
87
|
+
let respType = go.getTypeDeclaration(method.returns, pkg);
|
|
83
88
|
if (method.kind === 'lroPageableMethod') {
|
|
84
|
-
respType = `azfake.PagerResponder[${
|
|
89
|
+
respType = `azfake.PagerResponder[${respType}]`;
|
|
85
90
|
}
|
|
86
91
|
serverResponse = `resp azfake.PollerResponder[${respType}], errResp azfake.ErrorResponder`;
|
|
87
92
|
break;
|
|
88
93
|
case 'method':
|
|
89
|
-
serverResponse = `resp azfake.Responder[${
|
|
94
|
+
serverResponse = `resp azfake.Responder[${go.getTypeDeclaration(method.returns, pkg)}], errResp azfake.ErrorResponder`;
|
|
90
95
|
break;
|
|
91
96
|
case 'pageableMethod':
|
|
92
|
-
serverResponse = `resp azfake.PagerResponder[${
|
|
97
|
+
serverResponse = `resp azfake.PagerResponder[${go.getTypeDeclaration(method.returns, pkg)}]`;
|
|
93
98
|
break;
|
|
94
99
|
}
|
|
95
100
|
const operationName = fixUpMethodName(method);
|
|
@@ -103,7 +108,7 @@ export async function generateServers(codeModel) {
|
|
|
103
108
|
successCodes.push(`${helpers.formatStatusCode(httpStatus)} (no return type)`);
|
|
104
109
|
continue;
|
|
105
110
|
}
|
|
106
|
-
successCodes.push(`${helpers.formatStatusCode(httpStatus)} (returns ${go.getTypeDeclaration(result,
|
|
111
|
+
successCodes.push(`${helpers.formatStatusCode(httpStatus)} (returns ${go.getTypeDeclaration(result, pkg)})`);
|
|
107
112
|
}
|
|
108
113
|
content += '\t// HTTP status codes to indicate success:\n';
|
|
109
114
|
for (const successCode of successCodes) {
|
|
@@ -116,7 +121,7 @@ export async function generateServers(codeModel) {
|
|
|
116
121
|
}
|
|
117
122
|
content += `\t// HTTP status codes to indicate success: ${successCodes.join(', ')}\n`;
|
|
118
123
|
}
|
|
119
|
-
content += `\t${operationName} func(${getAPIParametersSig(method, imports
|
|
124
|
+
content += `\t${operationName} func(${getAPIParametersSig(pkg, method, imports)}) (${serverResponse})\n\n`;
|
|
120
125
|
finalMethods.push(method);
|
|
121
126
|
switch (method.kind) {
|
|
122
127
|
case 'lroMethod':
|
|
@@ -132,7 +137,7 @@ export async function generateServers(codeModel) {
|
|
|
132
137
|
///////////////////////////////////////////////////////////////////////////
|
|
133
138
|
const serverTransport = `${serverName}Transport`;
|
|
134
139
|
content += `// New${serverTransport} creates a new instance of ${serverTransport} with the provided implementation.\n`;
|
|
135
|
-
content += `// The returned ${serverTransport} instance is connected to an instance of ${
|
|
140
|
+
content += `// The returned ${serverTransport} instance is connected to an instance of ${go.getTypeDeclaration(client, pkg)} via the\n`;
|
|
136
141
|
content += '// azcore.ClientOptions.Transporter field in the client\'s constructor parameters.\n';
|
|
137
142
|
content += `func New${serverTransport}(srv *${serverName}) *${serverTransport} {\n`;
|
|
138
143
|
if (countLROs === 0 && countPagers === 0) {
|
|
@@ -141,12 +146,12 @@ export async function generateServers(codeModel) {
|
|
|
141
146
|
else {
|
|
142
147
|
content += `\treturn &${serverTransport}{\n\t\tsrv: srv,\n`;
|
|
143
148
|
for (const method of values(finalMethods)) {
|
|
144
|
-
let respType =
|
|
149
|
+
let respType = go.getTypeDeclaration(method.returns, pkg);
|
|
145
150
|
switch (method.kind) {
|
|
146
151
|
case 'lroMethod':
|
|
147
152
|
case 'lroPageableMethod':
|
|
148
153
|
if (method.kind === 'lroPageableMethod') {
|
|
149
|
-
respType = `azfake.PagerResponder[${
|
|
154
|
+
respType = `azfake.PagerResponder[${go.getTypeDeclaration(method.returns, pkg)}]`;
|
|
150
155
|
}
|
|
151
156
|
requiredHelpers.tracker = true;
|
|
152
157
|
content += `\t\t${uncapitalize(fixUpMethodName(method))}: newTracker[azfake.PollerResponder[${respType}]](),\n`;
|
|
@@ -159,7 +164,7 @@ export async function generateServers(codeModel) {
|
|
|
159
164
|
}
|
|
160
165
|
content += '\t}\n}\n\n';
|
|
161
166
|
}
|
|
162
|
-
content += `// ${serverTransport} connects instances of ${
|
|
167
|
+
content += `// ${serverTransport} connects instances of ${go.getTypeDeclaration(client, pkg)} to instances of ${serverName}.\n`;
|
|
163
168
|
content += `// Don't use this type directly, use New${serverTransport} instead.\n`;
|
|
164
169
|
content += `type ${serverTransport} struct {\n`;
|
|
165
170
|
content += `\tsrv *${serverName}\n`;
|
|
@@ -175,19 +180,19 @@ export async function generateServers(codeModel) {
|
|
|
175
180
|
}
|
|
176
181
|
for (const method of values(finalMethods)) {
|
|
177
182
|
// create state machines for any pager/poller operations
|
|
178
|
-
let respType =
|
|
183
|
+
let respType = go.getTypeDeclaration(method.returns, pkg);
|
|
179
184
|
switch (method.kind) {
|
|
180
185
|
case 'lroMethod':
|
|
181
186
|
case 'lroPageableMethod':
|
|
182
187
|
if (method.kind === 'lroPageableMethod') {
|
|
183
|
-
respType = `azfake.PagerResponder[${
|
|
188
|
+
respType = `azfake.PagerResponder[${go.getTypeDeclaration(method.returns, pkg)}]`;
|
|
184
189
|
}
|
|
185
190
|
requiredHelpers.tracker = true;
|
|
186
191
|
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PollerResponder[${respType}]]\n`;
|
|
187
192
|
break;
|
|
188
193
|
case 'pageableMethod':
|
|
189
194
|
requiredHelpers.tracker = true;
|
|
190
|
-
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PagerResponder[${
|
|
195
|
+
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PagerResponder[${go.getTypeDeclaration(method.returns, pkg)}]]\n`;
|
|
191
196
|
break;
|
|
192
197
|
}
|
|
193
198
|
}
|
|
@@ -195,19 +200,19 @@ export async function generateServers(codeModel) {
|
|
|
195
200
|
content += generateServerTransportDo(serverTransport, client, finalSubClients, finalMethods);
|
|
196
201
|
content += generateServerTransportClientDispatch(serverTransport, finalSubClients, imports);
|
|
197
202
|
content += generateServerTransportMethodDispatch(serverTransport, client, finalMethods);
|
|
198
|
-
content += generateServerTransportMethods(
|
|
203
|
+
content += generateServerTransportMethods(pkg, serverTransport, finalMethods, imports);
|
|
199
204
|
content += `// set this to conditionally intercept incoming requests to ${serverTransport}\n`;
|
|
200
205
|
content += `var ${getTransportInterceptorVarName(client)} interface {\n`;
|
|
201
206
|
content += '\t// Do returns true if the server transport should use the returned response/error\n';
|
|
202
207
|
content += '\tDo(*http.Request) (*http.Response, error, bool)\n}\n';
|
|
203
208
|
///////////////////////////////////////////////////////////////////////////
|
|
204
209
|
// stitch everything together
|
|
205
|
-
let text = helpers.contentPreamble(
|
|
210
|
+
let text = helpers.contentPreamble(pkg);
|
|
206
211
|
text += imports.text();
|
|
207
212
|
text += content;
|
|
208
213
|
operations.push(new OperationGroupContent(serverName, text));
|
|
209
214
|
}
|
|
210
|
-
return new ServerContent(operations, generateServerInternal(
|
|
215
|
+
return new ServerContent(operations, generateServerInternal(pkg, requiredHelpers));
|
|
211
216
|
}
|
|
212
217
|
function getTransportInterceptorVarName(client) {
|
|
213
218
|
return `${camelCase(getServerName(client))}TransportInterceptor`;
|
|
@@ -294,11 +299,20 @@ function generateServerTransportMethodDispatch(serverTransport, client, finalMet
|
|
|
294
299
|
content += '\t}\n}\n\n';
|
|
295
300
|
return content;
|
|
296
301
|
}
|
|
297
|
-
|
|
302
|
+
/**
|
|
303
|
+
* generates the server transport methods for a fake server transport
|
|
304
|
+
*
|
|
305
|
+
* @param pkg contains the package content
|
|
306
|
+
* @param serverTransport the name of the server transport type
|
|
307
|
+
* @param finalMethods the array of methods for which to generate the fake transports
|
|
308
|
+
* @param imports the import manager currently in scope
|
|
309
|
+
* @returns the text for the server transport methods
|
|
310
|
+
*/
|
|
311
|
+
function generateServerTransportMethods(pkg, serverTransport, finalMethods, imports) {
|
|
298
312
|
if (finalMethods.length === 0) {
|
|
299
313
|
return '';
|
|
300
314
|
}
|
|
301
|
-
imports.
|
|
315
|
+
imports.addForPkg(pkg.parent);
|
|
302
316
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/fake', 'azfake');
|
|
303
317
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/fake/server');
|
|
304
318
|
const receiverName = serverTransport[0].toLowerCase();
|
|
@@ -311,10 +325,10 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
311
325
|
case 'lroMethod':
|
|
312
326
|
case 'lroPageableMethod':
|
|
313
327
|
// must check LRO before pager as you can have paged LROs
|
|
314
|
-
content += dispatchForLROBody(
|
|
328
|
+
content += dispatchForLROBody(pkg, receiverName, method, imports);
|
|
315
329
|
break;
|
|
316
330
|
case 'method': {
|
|
317
|
-
content += dispatchForOperationBody(
|
|
331
|
+
content += dispatchForOperationBody(pkg, receiverName, method, imports);
|
|
318
332
|
content += '\trespContent := server.GetResponseContent(respr)\n';
|
|
319
333
|
const formattedStatusCodes = helpers.formatStatusCodes(method.httpStatusCodes);
|
|
320
334
|
content += `\tif !contains([]int{${formattedStatusCodes}}, respContent.HTTPStatus) {\n`;
|
|
@@ -380,7 +394,7 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
380
394
|
break;
|
|
381
395
|
}
|
|
382
396
|
case 'pageableMethod':
|
|
383
|
-
content += dispatchForPagerBody(
|
|
397
|
+
content += dispatchForPagerBody(pkg, receiverName, method, imports);
|
|
384
398
|
break;
|
|
385
399
|
default:
|
|
386
400
|
method;
|
|
@@ -389,7 +403,17 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
389
403
|
}
|
|
390
404
|
return content;
|
|
391
405
|
}
|
|
392
|
-
|
|
406
|
+
/**
|
|
407
|
+
* generates the core dispatching logic for a server dispatch method.
|
|
408
|
+
* this code is common to all method types.
|
|
409
|
+
*
|
|
410
|
+
* @param pkg contains the package content
|
|
411
|
+
* @param receiverName the name of the receiver for the dispatch method
|
|
412
|
+
* @param method the method for which to emit dispatching logic
|
|
413
|
+
* @param imports the import manager currently in scope
|
|
414
|
+
* @returns the text for dispatching logic
|
|
415
|
+
*/
|
|
416
|
+
function dispatchForOperationBody(pkg, receiverName, method, imports) {
|
|
393
417
|
const methodParamGroups = helpers.getMethodParamGroups(method);
|
|
394
418
|
const numPathParams = values(methodParamGroups.pathParams).where((each) => { return !go.isLiteralParameter(each.style); }).count();
|
|
395
419
|
let content = '';
|
|
@@ -437,7 +461,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
437
461
|
content += '\treq.Body.Close()\n';
|
|
438
462
|
break;
|
|
439
463
|
default: {
|
|
440
|
-
let bodyTypeName = go.getTypeDeclaration(bodyParam.type,
|
|
464
|
+
let bodyTypeName = go.getTypeDeclaration(bodyParam.type, pkg);
|
|
441
465
|
if (bodyParam.type.kind === 'time') {
|
|
442
466
|
bodyTypeName = bodyParam.type.format;
|
|
443
467
|
}
|
|
@@ -465,15 +489,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
465
489
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
466
490
|
content += '\treader := multipart.NewReader(req.Body, params["boundary"])\n';
|
|
467
491
|
for (const param of multipartBodyParams) {
|
|
468
|
-
|
|
469
|
-
switch (param.type.kind) {
|
|
470
|
-
case 'constant':
|
|
471
|
-
case 'model':
|
|
472
|
-
case 'polymorphicModel':
|
|
473
|
-
pkgPrefix = clientPkg + '.';
|
|
474
|
-
break;
|
|
475
|
-
}
|
|
476
|
-
content += `\tvar ${param.name} ${pkgPrefix}${go.getTypeDeclaration(param.type)}\n`;
|
|
492
|
+
content += `\tvar ${param.name} ${go.getTypeDeclaration(param.type, pkg)}\n`;
|
|
477
493
|
}
|
|
478
494
|
content += '\tfor {\n';
|
|
479
495
|
content += '\t\tvar part *multipart.Part\n';
|
|
@@ -549,7 +565,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
549
565
|
from = 'content';
|
|
550
566
|
break;
|
|
551
567
|
}
|
|
552
|
-
assignedValue = `${
|
|
568
|
+
assignedValue = `${go.getTypeDeclaration(type, pkg)}(${from})`;
|
|
553
569
|
}
|
|
554
570
|
else if (type.kind === 'scalar') {
|
|
555
571
|
switch (type.type) {
|
|
@@ -627,11 +643,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
627
643
|
}
|
|
628
644
|
else if (formBodyParams.length > 0) {
|
|
629
645
|
for (const param of formBodyParams) {
|
|
630
|
-
|
|
631
|
-
if (param.type.kind === 'constant') {
|
|
632
|
-
pkgPrefix = clientPkg + '.';
|
|
633
|
-
}
|
|
634
|
-
content += `\tvar ${param.name} ${pkgPrefix}${go.getTypeDeclaration(param.type)}\n`;
|
|
646
|
+
content += `\tvar ${param.name} ${go.getTypeDeclaration(param.type, pkg)}\n`;
|
|
635
647
|
}
|
|
636
648
|
content += '\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, &nonRetriableError{fmt.Errorf("failed parsing form data: %v", err)}\n\t}\n';
|
|
637
649
|
content += '\tfor key := range req.Form {\n';
|
|
@@ -641,7 +653,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
641
653
|
let assignedValue;
|
|
642
654
|
switch (param.type.kind) {
|
|
643
655
|
case 'constant':
|
|
644
|
-
assignedValue = `${go.getTypeDeclaration(param.type,
|
|
656
|
+
assignedValue = `${go.getTypeDeclaration(param.type, pkg)}(req.FormValue(key))`;
|
|
645
657
|
break;
|
|
646
658
|
case 'string':
|
|
647
659
|
assignedValue = 'req.FormValue(key)';
|
|
@@ -658,19 +670,19 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
658
670
|
// construct the partial body params type and unmarshal it
|
|
659
671
|
content += '\ttype partialBodyParams struct {\n';
|
|
660
672
|
for (const partialBodyParam of partialBodyParams) {
|
|
661
|
-
content += `\t\t${capitalize(partialBodyParam.name)} ${helpers.star(partialBodyParam.byValue)}${go.getTypeDeclaration(partialBodyParam.type,
|
|
673
|
+
content += `\t\t${capitalize(partialBodyParam.name)} ${helpers.star(partialBodyParam.byValue)}${go.getTypeDeclaration(partialBodyParam.type, pkg)} \`json:"${partialBodyParam.serializedName}"\`\n`;
|
|
662
674
|
}
|
|
663
675
|
content += '\t}\n';
|
|
664
676
|
content += `\tbody, err := server.UnmarshalRequestAs${partialBodyParams[0].format}[partialBodyParams](req)\n`;
|
|
665
677
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
666
678
|
}
|
|
667
|
-
const result = parseHeaderPathQueryParams(
|
|
679
|
+
const result = parseHeaderPathQueryParams(pkg, method, imports);
|
|
668
680
|
content += result.content;
|
|
669
681
|
// translate each partial body param to its field within the unmarshalled body
|
|
670
682
|
for (const partialBodyParam of partialBodyParams) {
|
|
671
683
|
result.params.set(partialBodyParam.name, `${helpers.star(partialBodyParam.byValue)}body.${capitalize(partialBodyParam.name)}`);
|
|
672
684
|
}
|
|
673
|
-
const apiCall = `:= ${receiverName}.srv.${fixUpMethodName(method)}(${populateApiParams(
|
|
685
|
+
const apiCall = `:= ${receiverName}.srv.${fixUpMethodName(method)}(${populateApiParams(pkg, method, result.params, imports)})`;
|
|
674
686
|
if (method.kind === 'pageableMethod') {
|
|
675
687
|
content += `resp ${apiCall}\n`;
|
|
676
688
|
return content;
|
|
@@ -698,13 +710,22 @@ function getMethodStatusCodes(method) {
|
|
|
698
710
|
}
|
|
699
711
|
return statusCodes;
|
|
700
712
|
}
|
|
701
|
-
|
|
713
|
+
/**
|
|
714
|
+
* generates the dispatching logic for an LRO server dispatch method
|
|
715
|
+
*
|
|
716
|
+
* @param pkg contains the package contents
|
|
717
|
+
* @param receiverName the name of the receiver for the dispatch method
|
|
718
|
+
* @param method the LRO method for which to emit the dispatch logic
|
|
719
|
+
* @param imports the import manager currently in scope
|
|
720
|
+
* @returns the text for the LRO dispatch logic
|
|
721
|
+
*/
|
|
722
|
+
function dispatchForLROBody(pkg, receiverName, method, imports) {
|
|
702
723
|
const operationName = fixUpMethodName(method);
|
|
703
724
|
const localVarName = uncapitalize(operationName);
|
|
704
725
|
const operationStateMachine = `${receiverName}.${uncapitalize(operationName)}`;
|
|
705
726
|
let content = `\t${localVarName} := ${operationStateMachine}.get(req)\n`;
|
|
706
727
|
content += `\tif ${localVarName} == nil {\n`;
|
|
707
|
-
content += dispatchForOperationBody(
|
|
728
|
+
content += dispatchForOperationBody(pkg, receiverName, method, imports);
|
|
708
729
|
content += `\t\t${localVarName} = &respr\n`;
|
|
709
730
|
content += `\t\t${operationStateMachine}.add(req, ${localVarName})\n`;
|
|
710
731
|
content += '\t}\n\n';
|
|
@@ -719,18 +740,27 @@ function dispatchForLROBody(clientPkg, receiverName, method, imports) {
|
|
|
719
740
|
content += '\treturn resp, nil\n';
|
|
720
741
|
return content;
|
|
721
742
|
}
|
|
722
|
-
|
|
743
|
+
/**
|
|
744
|
+
* generates the dispatching logic for a paged server dispatch method
|
|
745
|
+
*
|
|
746
|
+
* @param pkg contains the package contents
|
|
747
|
+
* @param receiverName the name of the receiver for the dispatch method
|
|
748
|
+
* @param method the pageable method for which to emit the dispatch logic
|
|
749
|
+
* @param imports the import manager currently in scope
|
|
750
|
+
* @returns the text for the pageable dispatch logic
|
|
751
|
+
*/
|
|
752
|
+
function dispatchForPagerBody(pkg, receiverName, method, imports) {
|
|
723
753
|
const operationName = fixUpMethodName(method);
|
|
724
754
|
const localVarName = uncapitalize(operationName);
|
|
725
755
|
const operationStateMachine = `${receiverName}.${uncapitalize(operationName)}`;
|
|
726
756
|
let content = `\t${localVarName} := ${operationStateMachine}.get(req)\n`;
|
|
727
757
|
content += `\tif ${localVarName} == nil {\n`;
|
|
728
|
-
content += dispatchForOperationBody(
|
|
758
|
+
content += dispatchForOperationBody(pkg, receiverName, method, imports);
|
|
729
759
|
content += `\t\t${localVarName} = &resp\n`;
|
|
730
760
|
content += `\t\t${operationStateMachine}.add(req, ${localVarName})\n`;
|
|
731
761
|
if (method.nextLinkName) {
|
|
732
762
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/to');
|
|
733
|
-
content += `\t\tserver.PagerResponderInjectNextLinks(${localVarName}, req, func(page *${
|
|
763
|
+
content += `\t\tserver.PagerResponderInjectNextLinks(${localVarName}, req, func(page *${go.getTypeDeclaration(method.returns, pkg)}, createLink func() string) {\n`;
|
|
734
764
|
content += `\t\t\tpage.${method.nextLinkName} = to.Ptr(createLink())\n`;
|
|
735
765
|
content += '\t\t})\n';
|
|
736
766
|
}
|
|
@@ -769,9 +799,15 @@ function createPathParamsRegex(method, pathParams) {
|
|
|
769
799
|
}
|
|
770
800
|
return urlPath;
|
|
771
801
|
}
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
802
|
+
/**
|
|
803
|
+
* parses header/path/query params as required
|
|
804
|
+
*
|
|
805
|
+
* @param pkg contains the package contents
|
|
806
|
+
* @param method the method for which to emit parameter parsing logic
|
|
807
|
+
* @param imports the import manager currently in scope
|
|
808
|
+
* @returns the parsing code and the params that contain the parsed values
|
|
809
|
+
*/
|
|
810
|
+
function parseHeaderPathQueryParams(pkg, method, imports) {
|
|
775
811
|
let content = '';
|
|
776
812
|
const paramValues = new Map();
|
|
777
813
|
const createLocalVariableName = function (param, suffix) {
|
|
@@ -864,10 +900,10 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
864
900
|
// for string-based enums, we perform the conversion as part of unescaping
|
|
865
901
|
requiredHelpers.parseWithCast = true;
|
|
866
902
|
paramVar = createLocalVariableName(param, 'Param');
|
|
867
|
-
content += `\t${paramVar}, err := parseWithCast(${paramValue}, func (v string) (${go.getTypeDeclaration(param.type,
|
|
903
|
+
content += `\t${paramVar}, err := parseWithCast(${paramValue}, func (v string) (${go.getTypeDeclaration(param.type, pkg)}, error) {\n`;
|
|
868
904
|
content += `\t\tp, unescapeErr := url.${where}Unescape(v)\n`;
|
|
869
905
|
content += '\t\tif unescapeErr != nil {\n\t\t\treturn "", unescapeErr\n\t\t}\n';
|
|
870
|
-
content += `\t\treturn ${go.getTypeDeclaration(param.type,
|
|
906
|
+
content += `\t\treturn ${go.getTypeDeclaration(param.type, pkg)}(p), nil\n\t})\n`;
|
|
871
907
|
}
|
|
872
908
|
else {
|
|
873
909
|
if (go.isRequiredParameter(param.style) &&
|
|
@@ -908,10 +944,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
908
944
|
default:
|
|
909
945
|
throw new CodegenError('InternalError', `unhandled element kind ${param.type.elementType.kind}`);
|
|
910
946
|
}
|
|
911
|
-
|
|
912
|
-
if (param.type.elementType.kind === 'constant') {
|
|
913
|
-
toType = `${clientPkg}.${toType}`;
|
|
914
|
-
}
|
|
947
|
+
const toType = go.getTypeDeclaration(param.type.elementType, pkg);
|
|
915
948
|
content += `\t${paramVar} := make([]${toType}, len(${paramValue}))\n`;
|
|
916
949
|
content += `\tfor i := 0; i < len(${paramValue}); i++ {\n`;
|
|
917
950
|
let fromVar;
|
|
@@ -1092,7 +1125,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1092
1125
|
parse = emitNumericConversion('v', param.type.type);
|
|
1093
1126
|
zeroValue = '0';
|
|
1094
1127
|
}
|
|
1095
|
-
const toConstType = go.getTypeDeclaration(param.type,
|
|
1128
|
+
const toConstType = go.getTypeDeclaration(param.type, pkg);
|
|
1096
1129
|
content += `\t${createLocalVariableName(param, 'Param')}, err := ${parseHelper}(${paramValue}, func(v string) (${toConstType}, error) {\n`;
|
|
1097
1130
|
content += `\t\tp, parseErr := ${parse}\n`;
|
|
1098
1131
|
content += `\t\tif parseErr != nil {\n\t\t\treturn ${zeroValue}, parseErr\n\t\t}\n`;
|
|
@@ -1103,7 +1136,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1103
1136
|
// we check this last as it's a superset of the previous conditions
|
|
1104
1137
|
requiredHelpers.getOptional = true;
|
|
1105
1138
|
if (param.type.kind === 'constant') {
|
|
1106
|
-
paramValue = `${go.getTypeDeclaration(param.type,
|
|
1139
|
+
paramValue = `${go.getTypeDeclaration(param.type, pkg)}(${paramValue})`;
|
|
1107
1140
|
}
|
|
1108
1141
|
content += `\t${createLocalVariableName(param, 'Param')} := getOptional(${paramValue})\n`;
|
|
1109
1142
|
}
|
|
@@ -1111,20 +1144,20 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1111
1144
|
// create the param groups and populate their values
|
|
1112
1145
|
for (const paramGroup of values(paramGroups.keys())) {
|
|
1113
1146
|
if (paramGroup.required) {
|
|
1114
|
-
content += `\t${uncapitalize(paramGroup.name)} := ${
|
|
1147
|
+
content += `\t${uncapitalize(paramGroup.name)} := ${go.getTypeDeclaration(paramGroup, pkg)}{\n`;
|
|
1115
1148
|
for (const param of values(paramGroups.get(paramGroup))) {
|
|
1116
|
-
content += `\t\t${capitalize(param.name)}: ${getFinalParamValue(
|
|
1149
|
+
content += `\t\t${capitalize(param.name)}: ${getFinalParamValue(pkg, param, paramValues)},\n`;
|
|
1117
1150
|
}
|
|
1118
1151
|
content += '\t}\n';
|
|
1119
1152
|
}
|
|
1120
1153
|
else {
|
|
1121
|
-
content += `\tvar ${uncapitalize(paramGroup.name)} *${
|
|
1154
|
+
content += `\tvar ${uncapitalize(paramGroup.name)} *${go.getTypeDeclaration(paramGroup, pkg)}\n`;
|
|
1122
1155
|
const params = paramGroups.get(paramGroup);
|
|
1123
1156
|
const paramNilCheck = new Array();
|
|
1124
1157
|
for (const param of values(params)) {
|
|
1125
1158
|
// check array before body in case the body is just an array
|
|
1126
1159
|
if (param.type.kind === 'slice') {
|
|
1127
|
-
paramNilCheck.push(`len(${getFinalParamValue(
|
|
1160
|
+
paramNilCheck.push(`len(${getFinalParamValue(pkg, param, paramValues)}) > 0`);
|
|
1128
1161
|
}
|
|
1129
1162
|
else if (param.kind === 'bodyParam') {
|
|
1130
1163
|
if (param.bodyFormat === 'binary') {
|
|
@@ -1141,17 +1174,17 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1141
1174
|
paramNilCheck.push(`!reflect.ValueOf(${param.name}).IsZero()`);
|
|
1142
1175
|
}
|
|
1143
1176
|
else {
|
|
1144
|
-
paramNilCheck.push(`${getFinalParamValue(
|
|
1177
|
+
paramNilCheck.push(`${getFinalParamValue(pkg, param, paramValues)} != nil`);
|
|
1145
1178
|
}
|
|
1146
1179
|
}
|
|
1147
1180
|
content += `\tif ${paramNilCheck.join(' || ')} {\n`;
|
|
1148
|
-
content += `\t\t${uncapitalize(paramGroup.name)} = &${
|
|
1181
|
+
content += `\t\t${uncapitalize(paramGroup.name)} = &${go.getTypeDeclaration(paramGroup, pkg)}{\n`;
|
|
1149
1182
|
for (const param of values(params)) {
|
|
1150
1183
|
let byRef = '&';
|
|
1151
1184
|
if (param.byValue || (!go.isRequiredParameter(param.style) && param.kind !== 'bodyParam' && !go.isFormBodyParameter(param) && param.kind !== 'multipartFormBodyParam')) {
|
|
1152
1185
|
byRef = '';
|
|
1153
1186
|
}
|
|
1154
|
-
content += `\t\t\t${capitalize(param.name)}: ${byRef}${getFinalParamValue(
|
|
1187
|
+
content += `\t\t\t${capitalize(param.name)}: ${byRef}${getFinalParamValue(pkg, param, paramValues)},\n`;
|
|
1155
1188
|
}
|
|
1156
1189
|
content += '\t\t}\n';
|
|
1157
1190
|
content += '\t}\n';
|
|
@@ -1162,8 +1195,16 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1162
1195
|
params: paramValues
|
|
1163
1196
|
};
|
|
1164
1197
|
}
|
|
1165
|
-
|
|
1166
|
-
|
|
1198
|
+
/**
|
|
1199
|
+
* generates the code to populate the method parameters that get passed to the fake
|
|
1200
|
+
*
|
|
1201
|
+
* @param pkg contains the package contents
|
|
1202
|
+
* @param method the method to be called with the parsed parameters
|
|
1203
|
+
* @param paramValues maps a parameter name to the value to be passed to the fake
|
|
1204
|
+
* @param imports the import manager currently in scope
|
|
1205
|
+
* @returns the text for the parameters to be passed to the fake
|
|
1206
|
+
*/
|
|
1207
|
+
function populateApiParams(pkg, method, paramValues, imports) {
|
|
1167
1208
|
// FooOperation(req.Context(), matches[regex.SubexpIndex("resourceGroupName")], qp.Get("api-version"), nil)
|
|
1168
1209
|
// this assumes that our caller has created matches and qp as required
|
|
1169
1210
|
const params = new Array();
|
|
@@ -1189,8 +1230,8 @@ function populateApiParams(clientPkg, method, paramValues, imports) {
|
|
|
1189
1230
|
params.push(uncapitalize(param.name));
|
|
1190
1231
|
continue;
|
|
1191
1232
|
}
|
|
1192
|
-
imports.
|
|
1193
|
-
params.push(getFinalParamValue(
|
|
1233
|
+
imports.addForType(param.type);
|
|
1234
|
+
params.push(getFinalParamValue(pkg, param, paramValues));
|
|
1194
1235
|
}
|
|
1195
1236
|
return params.join(', ');
|
|
1196
1237
|
}
|
|
@@ -1235,8 +1276,17 @@ function getRawParamValue(param) {
|
|
|
1235
1276
|
throw new CodegenError('InternalError', `unhandled parameter ${param.name}`);
|
|
1236
1277
|
}
|
|
1237
1278
|
}
|
|
1238
|
-
|
|
1239
|
-
|
|
1279
|
+
/**
|
|
1280
|
+
* returns the final value of param to be passed to the fake.
|
|
1281
|
+
* this is usually the value in paramValues but can be slightly
|
|
1282
|
+
* different for some cases.
|
|
1283
|
+
*
|
|
1284
|
+
* @param pkg the contents of the package
|
|
1285
|
+
* @param param the parameter being evaluated
|
|
1286
|
+
* @param paramValues maps a parameter name to the value to be passed to the fake
|
|
1287
|
+
* @returns the value to pass for the provided parameter
|
|
1288
|
+
*/
|
|
1289
|
+
function getFinalParamValue(pkg, param, paramValues) {
|
|
1240
1290
|
let paramValue = paramValues.get(param.name);
|
|
1241
1291
|
if (!paramValue) {
|
|
1242
1292
|
// the param didn't require parsing so the "raw" value can be used
|
|
@@ -1259,7 +1309,7 @@ function getFinalParamValue(clientPkg, param, paramValues) {
|
|
|
1259
1309
|
}
|
|
1260
1310
|
else if (go.isHeaderParameter(param) && param.type.kind === 'constant' && param.type.type === 'string') {
|
|
1261
1311
|
// since headers aren't escaped, we cast required, string-based enums inline
|
|
1262
|
-
return `${go.getTypeDeclaration(param.type,
|
|
1312
|
+
return `${go.getTypeDeclaration(param.type, pkg)}(${paramValue})`;
|
|
1263
1313
|
}
|
|
1264
1314
|
}
|
|
1265
1315
|
else if (param.kind === 'partialBodyParam') {
|
|
@@ -1292,8 +1342,15 @@ function consolidateHostParams(params) {
|
|
|
1292
1342
|
}
|
|
1293
1343
|
return consolidatedParams;
|
|
1294
1344
|
}
|
|
1295
|
-
|
|
1296
|
-
|
|
1345
|
+
/**
|
|
1346
|
+
* copied from generator/operations.ts but with a slight tweak to consolidate host parameters
|
|
1347
|
+
*
|
|
1348
|
+
* @param pkg the contents of the package
|
|
1349
|
+
* @param method the method for which to generate the parameter signature
|
|
1350
|
+
* @param imports the import manager currently in scope
|
|
1351
|
+
* @returns the text for the method's parameter signature
|
|
1352
|
+
*/
|
|
1353
|
+
function getAPIParametersSig(pkg, method, imports) {
|
|
1297
1354
|
const methodParams = helpers.getMethodParameters(method, consolidateHostParams);
|
|
1298
1355
|
const params = new Array();
|
|
1299
1356
|
if (method.kind !== 'pageableMethod') {
|
|
@@ -1305,7 +1362,7 @@ function getAPIParametersSig(method, imports, pkgName) {
|
|
|
1305
1362
|
if (methodParam.kind === 'uriParam') {
|
|
1306
1363
|
paramName = 'host';
|
|
1307
1364
|
}
|
|
1308
|
-
params.push(`${paramName} ${helpers.formatParameterTypeName(
|
|
1365
|
+
params.push(`${paramName} ${helpers.formatParameterTypeName(pkg, methodParam)}`);
|
|
1309
1366
|
}
|
|
1310
1367
|
return params.join(', ');
|
|
1311
1368
|
}
|