@azure-tools/typespec-go 0.8.2 → 0.8.3
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/clientFactory.d.ts.map +1 -1
- package/dist/codegen.go/src/clientFactory.js +4 -0
- package/dist/codegen.go/src/clientFactory.js.map +1 -1
- package/dist/codegen.go/src/cloudConfig.d.ts +10 -0
- package/dist/codegen.go/src/cloudConfig.d.ts.map +1 -0
- package/dist/codegen.go/src/cloudConfig.js +65 -0
- package/dist/codegen.go/src/cloudConfig.js.map +1 -0
- package/dist/codegen.go/src/example.d.ts.map +1 -1
- package/dist/codegen.go/src/example.js +98 -109
- package/dist/codegen.go/src/example.js.map +1 -1
- package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/factory.js +11 -2
- package/dist/codegen.go/src/fake/factory.js.map +1 -1
- package/dist/codegen.go/src/fake/servers.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/servers.js +58 -65
- package/dist/codegen.go/src/fake/servers.js.map +1 -1
- package/dist/codegen.go/src/helpers.d.ts +36 -3
- package/dist/codegen.go/src/helpers.d.ts.map +1 -1
- package/dist/codegen.go/src/helpers.js +72 -17
- package/dist/codegen.go/src/helpers.js.map +1 -1
- package/dist/codegen.go/src/imports.d.ts +1 -1
- package/dist/codegen.go/src/imports.d.ts.map +1 -1
- package/dist/codegen.go/src/imports.js +4 -6
- package/dist/codegen.go/src/imports.js.map +1 -1
- package/dist/codegen.go/src/models.d.ts +0 -1
- package/dist/codegen.go/src/models.d.ts.map +1 -1
- package/dist/codegen.go/src/models.js +1 -7
- package/dist/codegen.go/src/models.js.map +1 -1
- package/dist/codegen.go/src/operations.d.ts.map +1 -1
- package/dist/codegen.go/src/operations.js +349 -141
- package/dist/codegen.go/src/operations.js.map +1 -1
- package/dist/codegen.go/src/responses.d.ts.map +1 -1
- package/dist/codegen.go/src/responses.js +2 -3
- package/dist/codegen.go/src/responses.js.map +1 -1
- package/dist/codemodel.go/src/client.d.ts +99 -35
- package/dist/codemodel.go/src/client.d.ts.map +1 -1
- package/dist/codemodel.go/src/client.js +53 -13
- package/dist/codemodel.go/src/client.js.map +1 -1
- package/dist/codemodel.go/src/examples.d.ts +3 -11
- package/dist/codemodel.go/src/examples.d.ts.map +1 -1
- package/dist/codemodel.go/src/examples.js +0 -7
- package/dist/codemodel.go/src/examples.js.map +1 -1
- package/dist/codemodel.go/src/index.d.ts.map +1 -1
- package/dist/codemodel.go/src/index.js +1 -0
- package/dist/codemodel.go/src/index.js.map +1 -1
- package/dist/codemodel.go/src/method.d.ts +44 -0
- package/dist/codemodel.go/src/method.d.ts.map +1 -0
- package/dist/codemodel.go/src/method.js +30 -0
- package/dist/codemodel.go/src/method.js.map +1 -0
- package/dist/codemodel.go/src/package.d.ts +2 -0
- package/dist/codemodel.go/src/package.d.ts.map +1 -1
- package/dist/codemodel.go/src/package.js +8 -0
- package/dist/codemodel.go/src/package.js.map +1 -1
- package/dist/codemodel.go/src/param.d.ts +67 -40
- package/dist/codemodel.go/src/param.d.ts.map +1 -1
- package/dist/codemodel.go/src/param.js +46 -25
- package/dist/codemodel.go/src/param.js.map +1 -1
- package/dist/codemodel.go/src/result.d.ts +1 -1
- package/dist/codemodel.go/src/result.d.ts.map +1 -1
- package/dist/codemodel.go/src/result.js +1 -1
- package/dist/codemodel.go/src/result.js.map +1 -1
- package/dist/codemodel.go/src/type.d.ts +53 -15
- package/dist/codemodel.go/src/type.d.ts.map +1 -1
- package/dist/codemodel.go/src/type.js +52 -18
- package/dist/codemodel.go/src/type.js.map +1 -1
- package/dist/typespec-go/src/emitter.d.ts +9 -0
- package/dist/typespec-go/src/emitter.d.ts.map +1 -1
- package/dist/typespec-go/src/emitter.js +37 -1
- package/dist/typespec-go/src/emitter.js.map +1 -1
- package/dist/typespec-go/src/lib.d.ts +1 -0
- package/dist/typespec-go/src/lib.d.ts.map +1 -1
- package/dist/typespec-go/src/lib.js +5 -0
- package/dist/typespec-go/src/lib.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js +4 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts +18 -2
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.js +233 -53
- package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.d.ts +7 -0
- package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.js +17 -10
- package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
- package/package.json +21 -20
|
@@ -34,14 +34,11 @@ 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
|
-
function isMethodInternal(method) {
|
|
38
|
-
return !!method.name.match(/^[a-z]{1}/);
|
|
39
|
-
}
|
|
40
37
|
export async function generateServers(codeModel) {
|
|
41
38
|
const operations = new Array();
|
|
42
39
|
const clientPkg = codeModel.packageName;
|
|
43
40
|
for (const client of values(codeModel.clients)) {
|
|
44
|
-
if (client.clientAccessors.length === 0 && values(client.methods).all(method => { return isMethodInternal(method); })) {
|
|
41
|
+
if (client.clientAccessors.length === 0 && values(client.methods).all(method => { return helpers.isMethodInternal(method); })) {
|
|
45
42
|
// client has no client accessors and no exported methods, skip it
|
|
46
43
|
continue;
|
|
47
44
|
}
|
|
@@ -64,7 +61,7 @@ export async function generateServers(codeModel) {
|
|
|
64
61
|
// we might remove some clients from the list
|
|
65
62
|
const finalSubClients = new Array();
|
|
66
63
|
for (const clientAccessor of client.clientAccessors) {
|
|
67
|
-
if (values(clientAccessor.subClient.methods).all(method => { return isMethodInternal(method); })) {
|
|
64
|
+
if (values(clientAccessor.subClient.methods).all(method => { return helpers.isMethodInternal(method); })) {
|
|
68
65
|
// client has no exported methods, skip it
|
|
69
66
|
continue;
|
|
70
67
|
}
|
|
@@ -74,7 +71,7 @@ export async function generateServers(codeModel) {
|
|
|
74
71
|
finalSubClients.push(clientAccessor.subClient);
|
|
75
72
|
}
|
|
76
73
|
for (const method of values(client.methods)) {
|
|
77
|
-
if (isMethodInternal(method)) {
|
|
74
|
+
if (helpers.isMethodInternal(method)) {
|
|
78
75
|
// method isn't exported, don't create a fake for it
|
|
79
76
|
continue;
|
|
80
77
|
}
|
|
@@ -82,25 +79,25 @@ export async function generateServers(codeModel) {
|
|
|
82
79
|
switch (method.kind) {
|
|
83
80
|
case 'lroMethod':
|
|
84
81
|
case 'lroPageableMethod':
|
|
85
|
-
let respType = `${clientPkg}.${method.
|
|
82
|
+
let respType = `${clientPkg}.${method.returns.name}`;
|
|
86
83
|
if (method.kind === 'lroPageableMethod') {
|
|
87
|
-
respType = `azfake.PagerResponder[${clientPkg}.${method.
|
|
84
|
+
respType = `azfake.PagerResponder[${clientPkg}.${method.returns.name}]`;
|
|
88
85
|
}
|
|
89
86
|
serverResponse = `resp azfake.PollerResponder[${respType}], errResp azfake.ErrorResponder`;
|
|
90
87
|
break;
|
|
91
88
|
case 'method':
|
|
92
|
-
serverResponse = `resp azfake.Responder[${clientPkg}.${method.
|
|
89
|
+
serverResponse = `resp azfake.Responder[${clientPkg}.${method.returns.name}], errResp azfake.ErrorResponder`;
|
|
93
90
|
break;
|
|
94
91
|
case 'pageableMethod':
|
|
95
|
-
serverResponse = `resp azfake.PagerResponder[${clientPkg}.${method.
|
|
92
|
+
serverResponse = `resp azfake.PagerResponder[${clientPkg}.${method.returns.name}]`;
|
|
96
93
|
break;
|
|
97
94
|
}
|
|
98
95
|
const operationName = fixUpMethodName(method);
|
|
99
96
|
content += `\t// ${operationName} is the fake for method ${client.name}.${operationName}\n`;
|
|
100
97
|
const successCodes = new Array();
|
|
101
|
-
if (method.
|
|
98
|
+
if (method.returns.result?.kind === 'anyResult') {
|
|
102
99
|
for (const httpStatus of getMethodStatusCodes(method)) {
|
|
103
|
-
const result = method.
|
|
100
|
+
const result = method.returns.result.httpStatusCodeType[httpStatus];
|
|
104
101
|
if (!result) {
|
|
105
102
|
// the operation contains a mix of schemas and non-schema responses
|
|
106
103
|
successCodes.push(`${helpers.formatStatusCode(httpStatus)} (no return type)`);
|
|
@@ -144,12 +141,12 @@ export async function generateServers(codeModel) {
|
|
|
144
141
|
else {
|
|
145
142
|
content += `\treturn &${serverTransport}{\n\t\tsrv: srv,\n`;
|
|
146
143
|
for (const method of values(finalMethods)) {
|
|
147
|
-
let respType = `${clientPkg}.${method.
|
|
144
|
+
let respType = `${clientPkg}.${method.returns.name}`;
|
|
148
145
|
switch (method.kind) {
|
|
149
146
|
case 'lroMethod':
|
|
150
147
|
case 'lroPageableMethod':
|
|
151
148
|
if (method.kind === 'lroPageableMethod') {
|
|
152
|
-
respType = `azfake.PagerResponder[${clientPkg}.${method.
|
|
149
|
+
respType = `azfake.PagerResponder[${clientPkg}.${method.returns.name}]`;
|
|
153
150
|
}
|
|
154
151
|
requiredHelpers.tracker = true;
|
|
155
152
|
content += `\t\t${uncapitalize(fixUpMethodName(method))}: newTracker[azfake.PollerResponder[${respType}]](),\n`;
|
|
@@ -178,19 +175,19 @@ export async function generateServers(codeModel) {
|
|
|
178
175
|
}
|
|
179
176
|
for (const method of values(finalMethods)) {
|
|
180
177
|
// create state machines for any pager/poller operations
|
|
181
|
-
let respType = `${clientPkg}.${method.
|
|
178
|
+
let respType = `${clientPkg}.${method.returns.name}`;
|
|
182
179
|
switch (method.kind) {
|
|
183
180
|
case 'lroMethod':
|
|
184
181
|
case 'lroPageableMethod':
|
|
185
182
|
if (method.kind === 'lroPageableMethod') {
|
|
186
|
-
respType = `azfake.PagerResponder[${clientPkg}.${method.
|
|
183
|
+
respType = `azfake.PagerResponder[${clientPkg}.${method.returns.name}]`;
|
|
187
184
|
}
|
|
188
185
|
requiredHelpers.tracker = true;
|
|
189
186
|
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PollerResponder[${respType}]]\n`;
|
|
190
187
|
break;
|
|
191
188
|
case 'pageableMethod':
|
|
192
189
|
requiredHelpers.tracker = true;
|
|
193
|
-
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PagerResponder[${clientPkg}.${method.
|
|
190
|
+
content += `\t${uncapitalize(fixUpMethodName(method))} *tracker[azfake.PagerResponder[${clientPkg}.${method.returns.name}]]\n`;
|
|
194
191
|
break;
|
|
195
192
|
}
|
|
196
193
|
}
|
|
@@ -322,24 +319,24 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
322
319
|
const formattedStatusCodes = helpers.formatStatusCodes(method.httpStatusCodes);
|
|
323
320
|
content += `\tif !contains([]int{${formattedStatusCodes}}, respContent.HTTPStatus) {\n`;
|
|
324
321
|
content += `\t\treturn nil, &nonRetriableError{fmt.Errorf("unexpected status code %d. acceptable values are ${formattedStatusCodes}", respContent.HTTPStatus)}\n\t}\n`;
|
|
325
|
-
if (!method.
|
|
322
|
+
if (!method.returns.result || method.returns.result.kind === 'headAsBooleanResult') {
|
|
326
323
|
content += '\tresp, err := server.NewResponse(respContent, req, nil)\n';
|
|
327
324
|
}
|
|
328
|
-
else if (method.
|
|
329
|
-
content += `\tresp, err := server.MarshalResponseAs${method.
|
|
325
|
+
else if (method.returns.result.kind === 'anyResult') {
|
|
326
|
+
content += `\tresp, err := server.MarshalResponseAs${method.returns.result.format}(respContent, server.GetResponse(respr).${getResultFieldName(method.returns.result)}, req)\n`;
|
|
330
327
|
}
|
|
331
|
-
else if (method.
|
|
328
|
+
else if (method.returns.result.kind === 'binaryResult') {
|
|
332
329
|
content += '\tresp, err := server.NewResponse(respContent, req, &server.ResponseOptions{\n';
|
|
333
|
-
content += `\t\tBody: server.GetResponse(respr).${getResultFieldName(method.
|
|
330
|
+
content += `\t\tBody: server.GetResponse(respr).${getResultFieldName(method.returns.result)},\n`;
|
|
334
331
|
content += '\t\tContentType: req.Header.Get("Content-Type"),\n';
|
|
335
332
|
content += '\t})\n';
|
|
336
333
|
}
|
|
337
|
-
else if (method.
|
|
338
|
-
if (method.
|
|
339
|
-
const encoding = method.
|
|
340
|
-
content += `\tresp, err := server.MarshalResponseAsByteArray(respContent, server.GetResponse(respr).${getResultFieldName(method.
|
|
334
|
+
else if (method.returns.result.kind === 'monomorphicResult') {
|
|
335
|
+
if (method.returns.result.monomorphicType.kind === 'encodedBytes') {
|
|
336
|
+
const encoding = method.returns.result.monomorphicType.encoding;
|
|
337
|
+
content += `\tresp, err := server.MarshalResponseAsByteArray(respContent, server.GetResponse(respr).${getResultFieldName(method.returns.result)}, runtime.Base64${encoding}Format, req)\n`;
|
|
341
338
|
}
|
|
342
|
-
else if (method.
|
|
339
|
+
else if (method.returns.result.monomorphicType.kind === 'rawJSON') {
|
|
343
340
|
imports.add('bytes');
|
|
344
341
|
imports.add('io');
|
|
345
342
|
content += '\tresp, err := server.NewResponse(respContent, req, &server.ResponseOptions{\n';
|
|
@@ -347,26 +344,26 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
347
344
|
content += '\t\tContentType: "application/json",\n\t})\n';
|
|
348
345
|
}
|
|
349
346
|
else {
|
|
350
|
-
let respField = `.${getResultFieldName(method.
|
|
351
|
-
if (method.
|
|
347
|
+
let respField = `.${getResultFieldName(method.returns.result)}`;
|
|
348
|
+
if (method.returns.result.format === 'XML' && method.returns.result.monomorphicType.kind === 'slice') {
|
|
352
349
|
// for XML array responses we use the response type directly as it has the necessary XML tag for proper marshalling
|
|
353
350
|
respField = '';
|
|
354
351
|
}
|
|
355
352
|
let responseField = `server.GetResponse(respr)${respField}`;
|
|
356
|
-
if (method.
|
|
357
|
-
responseField = `(*${method.
|
|
353
|
+
if (method.returns.result.monomorphicType.kind === 'time') {
|
|
354
|
+
responseField = `(*${method.returns.result.monomorphicType.format})(${responseField})`;
|
|
358
355
|
}
|
|
359
|
-
content += `\tresp, err := server.MarshalResponseAs${method.
|
|
356
|
+
content += `\tresp, err := server.MarshalResponseAs${method.returns.result.format}(respContent, ${responseField}, req)\n`;
|
|
360
357
|
}
|
|
361
358
|
}
|
|
362
|
-
else if (method.
|
|
363
|
-
const respField = `.${getResultFieldName(method.
|
|
359
|
+
else if (method.returns.result.kind === 'modelResult' || method.returns.result.kind === 'polymorphicResult') {
|
|
360
|
+
const respField = `.${getResultFieldName(method.returns.result)}`;
|
|
364
361
|
const responseField = `server.GetResponse(respr)${respField}`;
|
|
365
|
-
content += `\tresp, err := server.MarshalResponseAs${method.
|
|
362
|
+
content += `\tresp, err := server.MarshalResponseAs${method.returns.result.format}(respContent, ${responseField}, req)\n`;
|
|
366
363
|
}
|
|
367
364
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
368
365
|
// propagate any header response values into the *http.Response
|
|
369
|
-
for (const header of values(method.
|
|
366
|
+
for (const header of values(method.returns.headers)) {
|
|
370
367
|
if (header.kind === 'headerMapResponse') {
|
|
371
368
|
content += `\tfor k, v := range server.GetResponse(respr).${header.fieldName} {\n`;
|
|
372
369
|
content += '\t\tif v != nil {\n';
|
|
@@ -394,7 +391,7 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
394
391
|
}
|
|
395
392
|
function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
396
393
|
const methodParamGroups = helpers.getMethodParamGroups(method);
|
|
397
|
-
const numPathParams = values(methodParamGroups.pathParams).where((each) => { return !go.isLiteralParameter(each); }).count();
|
|
394
|
+
const numPathParams = values(methodParamGroups.pathParams).where((each) => { return !go.isLiteralParameter(each.style); }).count();
|
|
398
395
|
let content = '';
|
|
399
396
|
if (numPathParams > 0) {
|
|
400
397
|
imports.add('regexp');
|
|
@@ -407,7 +404,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
407
404
|
content += '\t\treturn nil, fmt.Errorf("failed to parse path %s", req.URL.Path)\n\t}\n';
|
|
408
405
|
}
|
|
409
406
|
const allQueryParams = methodParamGroups.encodedQueryParams.concat(methodParamGroups.unencodedQueryParams);
|
|
410
|
-
if (values(allQueryParams).where((each) => { return each.location === 'method' && !go.isLiteralParameter(each); }).any()) {
|
|
407
|
+
if (values(allQueryParams).where((each) => { return each.location === 'method' && !go.isLiteralParameter(each.style); }).any()) {
|
|
411
408
|
content += '\tqp := req.URL.Query()\n';
|
|
412
409
|
}
|
|
413
410
|
// note that these are mutually exclusive
|
|
@@ -419,7 +416,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
419
416
|
switch (bodyParam.bodyFormat) {
|
|
420
417
|
case 'JSON':
|
|
421
418
|
case 'XML':
|
|
422
|
-
if (bodyParam && !go.isLiteralParameter(bodyParam)) {
|
|
419
|
+
if (bodyParam && !go.isLiteralParameter(bodyParam.style)) {
|
|
423
420
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/fake', 'azfake');
|
|
424
421
|
switch (bodyParam.type.kind) {
|
|
425
422
|
case 'encodedBytes':
|
|
@@ -451,7 +448,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
451
448
|
}
|
|
452
449
|
break;
|
|
453
450
|
case 'Text':
|
|
454
|
-
if (bodyParam && !go.isLiteralParameter(bodyParam)) {
|
|
451
|
+
if (bodyParam && !go.isLiteralParameter(bodyParam.style)) {
|
|
455
452
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/fake', 'azfake');
|
|
456
453
|
content += '\tbody, err := server.UnmarshalRequestAsText(req)\n';
|
|
457
454
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
@@ -520,10 +517,6 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
520
517
|
parsingCode += `\t\t\tif ${parseErr} != nil {\n\t\t\t\treturn nil, ${parseErr}\n\t\t\t}\n`;
|
|
521
518
|
return parsingCode;
|
|
522
519
|
};
|
|
523
|
-
const isMultipartContentType = function (type) {
|
|
524
|
-
type = helpers.recursiveUnwrapMapSlice(type);
|
|
525
|
-
return (type.kind === 'qualifiedType' && type.exportName === 'MultipartContent');
|
|
526
|
-
};
|
|
527
520
|
const isModelType = function (type) {
|
|
528
521
|
return type.kind === 'model' || type.kind === 'polymorphicModel';
|
|
529
522
|
};
|
|
@@ -536,7 +529,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
536
529
|
imports.add('encoding/json');
|
|
537
530
|
caseContent += `\t\t\tif err = json.Unmarshal(content, &${paramVar}); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n`;
|
|
538
531
|
}
|
|
539
|
-
else if (type.kind === '
|
|
532
|
+
else if (type.kind === 'readSeekCloser') {
|
|
540
533
|
imports.add('bytes');
|
|
541
534
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
542
535
|
assignedValue = 'streaming.NopCloser(bytes.NewReader(content))';
|
|
@@ -581,7 +574,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
581
574
|
else if (type.kind === 'string') {
|
|
582
575
|
assignedValue = 'string(content)';
|
|
583
576
|
}
|
|
584
|
-
else if (
|
|
577
|
+
else if (helpers.recursiveUnwrapMapSlice(type).kind === 'multipartContent') {
|
|
585
578
|
imports.add('bytes');
|
|
586
579
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
587
580
|
const bodyContent = 'streaming.NopCloser(bytes.NewReader(content))';
|
|
@@ -601,7 +594,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
601
594
|
}
|
|
602
595
|
}
|
|
603
596
|
else if (type.kind === 'slice') {
|
|
604
|
-
if (type.elementType.kind === '
|
|
597
|
+
if (type.elementType.kind === 'readSeekCloser') {
|
|
605
598
|
imports.add('bytes');
|
|
606
599
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
607
600
|
assignedValue = `append(${paramVar}, streaming.NopCloser(bytes.NewReader(content)))`;
|
|
@@ -665,7 +658,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
665
658
|
// construct the partial body params type and unmarshal it
|
|
666
659
|
content += '\ttype partialBodyParams struct {\n';
|
|
667
660
|
for (const partialBodyParam of partialBodyParams) {
|
|
668
|
-
content += `\t\t${capitalize(partialBodyParam.name)} ${helpers.star(partialBodyParam)}${go.getTypeDeclaration(partialBodyParam.type)} \`json:"${partialBodyParam.serializedName}"\`\n`;
|
|
661
|
+
content += `\t\t${capitalize(partialBodyParam.name)} ${helpers.star(partialBodyParam.byValue)}${go.getTypeDeclaration(partialBodyParam.type)} \`json:"${partialBodyParam.serializedName}"\`\n`;
|
|
669
662
|
}
|
|
670
663
|
content += '\t}\n';
|
|
671
664
|
content += `\tbody, err := server.UnmarshalRequestAs${partialBodyParams[0].format}[partialBodyParams](req)\n`;
|
|
@@ -675,7 +668,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
675
668
|
content += result.content;
|
|
676
669
|
// translate each partial body param to its field within the unmarshalled body
|
|
677
670
|
for (const partialBodyParam of partialBodyParams) {
|
|
678
|
-
result.params.set(partialBodyParam.name, `${helpers.star(partialBodyParam)}body.${capitalize(partialBodyParam.name)}`);
|
|
671
|
+
result.params.set(partialBodyParam.name, `${helpers.star(partialBodyParam.byValue)}body.${capitalize(partialBodyParam.name)}`);
|
|
679
672
|
}
|
|
680
673
|
const apiCall = `:= ${receiverName}.srv.${fixUpMethodName(method)}(${populateApiParams(clientPkg, method, result.params, imports)})`;
|
|
681
674
|
if (method.kind === 'pageableMethod') {
|
|
@@ -697,7 +690,7 @@ function getMethodStatusCodes(method) {
|
|
|
697
690
|
// pollers always include 200 as an acceptible status code so we emulate that here
|
|
698
691
|
statusCodes.unshift(200);
|
|
699
692
|
}
|
|
700
|
-
if (!method.
|
|
693
|
+
if (!method.returns.result && !statusCodes.includes(204)) {
|
|
701
694
|
// also include 204 if the LRO doesn't return a body
|
|
702
695
|
statusCodes.push(204);
|
|
703
696
|
}
|
|
@@ -737,7 +730,7 @@ function dispatchForPagerBody(clientPkg, receiverName, method, imports) {
|
|
|
737
730
|
content += `\t\t${operationStateMachine}.add(req, ${localVarName})\n`;
|
|
738
731
|
if (method.nextLinkName) {
|
|
739
732
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/to');
|
|
740
|
-
content += `\t\tserver.PagerResponderInjectNextLinks(${localVarName}, req, func(page *${clientPkg}.${method.
|
|
733
|
+
content += `\t\tserver.PagerResponderInjectNextLinks(${localVarName}, req, func(page *${clientPkg}.${method.returns.name}, createLink func() string) {\n`;
|
|
741
734
|
content += `\t\t\tpage.${method.nextLinkName} = to.Ptr(createLink())\n`;
|
|
742
735
|
content += '\t\t})\n';
|
|
743
736
|
}
|
|
@@ -804,7 +797,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
804
797
|
// we track the params separately as it might be a subset of ParameterGroup.params
|
|
805
798
|
const paramGroups = new Map();
|
|
806
799
|
for (const param of values(consolidateHostParams(method.parameters))) {
|
|
807
|
-
if (param.location === 'client' || go.isLiteralParameter(param)) {
|
|
800
|
+
if (param.location === 'client' || go.isLiteralParameter(param.style)) {
|
|
808
801
|
// client params and parameter literals aren't passed to APIs
|
|
809
802
|
continue;
|
|
810
803
|
}
|
|
@@ -867,7 +860,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
867
860
|
where = 'Query';
|
|
868
861
|
}
|
|
869
862
|
let paramVar = createLocalVariableName(param, 'Unescaped');
|
|
870
|
-
if (go.isRequiredParameter(param) && param.type.kind === 'constant' && param.type.type === 'string') {
|
|
863
|
+
if (go.isRequiredParameter(param.style) && param.type.kind === 'constant' && param.type.type === 'string') {
|
|
871
864
|
// for string-based enums, we perform the conversion as part of unescaping
|
|
872
865
|
requiredHelpers.parseWithCast = true;
|
|
873
866
|
paramVar = createLocalVariableName(param, 'Param');
|
|
@@ -877,7 +870,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
877
870
|
content += `\t\treturn ${go.getTypeDeclaration(param.type, clientPkg)}(p), nil\n\t})\n`;
|
|
878
871
|
}
|
|
879
872
|
else {
|
|
880
|
-
if (go.isRequiredParameter(param) &&
|
|
873
|
+
if (go.isRequiredParameter(param.style) &&
|
|
881
874
|
(param.type.kind === 'string' || (param.type.kind === 'slice' && param.type.elementType.kind === 'string'))) {
|
|
882
875
|
// by convention, if the value is in its "final form" (i.e. no parsing required)
|
|
883
876
|
// then its var is to have the "Param" suffix. the only case is string, everything
|
|
@@ -969,7 +962,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
969
962
|
// TODO: remove cast in some cases
|
|
970
963
|
content += `\t\t${paramVar}[i] = ${toType}(${fromVar})\n\t}\n`;
|
|
971
964
|
}
|
|
972
|
-
else if (!go.isRequiredParameter(param) && param.collectionFormat !== 'multi') {
|
|
965
|
+
else if (!go.isRequiredParameter(param.style) && param.collectionFormat !== 'multi') {
|
|
973
966
|
// for slices of strings that are required, the call to splitHelper(...) is inlined into
|
|
974
967
|
// the invocation of the fake e.g. srv.FakeFunc(splitHelper...). but if it's optional, we
|
|
975
968
|
// need to create a local first which will later be copied into the optional param group.
|
|
@@ -980,7 +973,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
980
973
|
else if (param.type.kind === 'scalar' && param.type.type === 'bool') {
|
|
981
974
|
imports.add('strconv');
|
|
982
975
|
let from = `strconv.ParseBool(${paramValue})`;
|
|
983
|
-
if (!go.isRequiredParameter(param)) {
|
|
976
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
984
977
|
requiredHelpers.parseOptional = true;
|
|
985
978
|
from = `parseOptional(${paramValue}, strconv.ParseBool)`;
|
|
986
979
|
}
|
|
@@ -1000,7 +993,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1000
993
|
format = helpers.timeRFC3339Format;
|
|
1001
994
|
}
|
|
1002
995
|
let from = `time.Parse("${format}", ${paramValue})`;
|
|
1003
|
-
if (!go.isRequiredParameter(param)) {
|
|
996
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
1004
997
|
requiredHelpers.parseOptional = true;
|
|
1005
998
|
from = `parseOptional(${paramValue}, func(v string) (time.Time, error) { return time.Parse("${format}", v) })`;
|
|
1006
999
|
}
|
|
@@ -1014,7 +1007,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1014
1007
|
format = 'time.RFC1123';
|
|
1015
1008
|
}
|
|
1016
1009
|
let from = `time.Parse(${format}, ${paramValue})`;
|
|
1017
|
-
if (!go.isRequiredParameter(param)) {
|
|
1010
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
1018
1011
|
requiredHelpers.parseOptional = true;
|
|
1019
1012
|
from = `parseOptional(${paramValue}, func(v string) (time.Time, error) { return time.Parse(${format}, v) })`;
|
|
1020
1013
|
}
|
|
@@ -1024,7 +1017,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1024
1017
|
else {
|
|
1025
1018
|
imports.add('strconv');
|
|
1026
1019
|
let parser;
|
|
1027
|
-
if (!go.isRequiredParameter(param)) {
|
|
1020
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
1028
1021
|
requiredHelpers.parseOptional = true;
|
|
1029
1022
|
parser = 'parseOptional';
|
|
1030
1023
|
}
|
|
@@ -1041,7 +1034,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1041
1034
|
}
|
|
1042
1035
|
else if (param.type.kind === 'scalar' && (param.type.type === 'float32' || param.type.type === 'float64' || param.type.type === 'int32' || param.type.type === 'int64')) {
|
|
1043
1036
|
let parser;
|
|
1044
|
-
if (!go.isRequiredParameter(param)) {
|
|
1037
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
1045
1038
|
requiredHelpers.parseOptional = true;
|
|
1046
1039
|
parser = 'parseOptional';
|
|
1047
1040
|
}
|
|
@@ -1049,7 +1042,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1049
1042
|
requiredHelpers.parseWithCast = true;
|
|
1050
1043
|
parser = 'parseWithCast';
|
|
1051
1044
|
}
|
|
1052
|
-
if ((param.type.type === 'float32' || param.type.type === 'int32') || !go.isRequiredParameter(param)) {
|
|
1045
|
+
if ((param.type.type === 'float32' || param.type.type === 'int32') || !go.isRequiredParameter(param.style)) {
|
|
1053
1046
|
content += `\t${createLocalVariableName(param, 'Param')}, err := ${parser}(${paramValue}, func(v string) (${param.type.type}, error) {\n`;
|
|
1054
1047
|
content += `\t\tp, parseErr := ${emitNumericConversion('v', param.type.type)}\n`;
|
|
1055
1048
|
content += '\t\tif parseErr != nil {\n\t\t\treturn 0, parseErr\n\t\t}\n';
|
|
@@ -1079,7 +1072,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1079
1072
|
}
|
|
1080
1073
|
else if (param.type.kind === 'constant' && param.type.type !== 'string') {
|
|
1081
1074
|
let parseHelper;
|
|
1082
|
-
if (!go.isRequiredParameter(param)) {
|
|
1075
|
+
if (!go.isRequiredParameter(param.style)) {
|
|
1083
1076
|
requiredHelpers.parseOptional = true;
|
|
1084
1077
|
parseHelper = 'parseOptional';
|
|
1085
1078
|
}
|
|
@@ -1106,7 +1099,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1106
1099
|
content += `\t\treturn ${toConstType}(p), nil\n\t})\n`;
|
|
1107
1100
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
1108
1101
|
}
|
|
1109
|
-
else if (!go.isRequiredParameter(param)) {
|
|
1102
|
+
else if (!go.isRequiredParameter(param.style)) {
|
|
1110
1103
|
// we check this last as it's a superset of the previous conditions
|
|
1111
1104
|
requiredHelpers.getOptional = true;
|
|
1112
1105
|
if (param.type.kind === 'constant') {
|
|
@@ -1155,7 +1148,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1155
1148
|
content += `\t\t${uncapitalize(paramGroup.name)} = &${clientPkg}.${paramGroup.groupName}{\n`;
|
|
1156
1149
|
for (const param of values(params)) {
|
|
1157
1150
|
let byRef = '&';
|
|
1158
|
-
if (param.byValue || (!go.isRequiredParameter(param) && param.kind !== 'bodyParam' && !go.isFormBodyParameter(param) && param.kind !== 'multipartFormBodyParam')) {
|
|
1151
|
+
if (param.byValue || (!go.isRequiredParameter(param.style) && param.kind !== 'bodyParam' && !go.isFormBodyParameter(param) && param.kind !== 'multipartFormBodyParam')) {
|
|
1159
1152
|
byRef = '';
|
|
1160
1153
|
}
|
|
1161
1154
|
content += `\t\t\t${capitalize(param.name)}: ${byRef}${getFinalParamValue(clientPkg, param, paramValues)},\n`;
|
|
@@ -1254,7 +1247,7 @@ function getFinalParamValue(clientPkg, param, paramValues) {
|
|
|
1254
1247
|
// time types in the body have been unmarshalled into our time helpers thus require a cast to time.Time
|
|
1255
1248
|
return `time.Time(${paramValue})`;
|
|
1256
1249
|
}
|
|
1257
|
-
else if (go.isRequiredParameter(param)) {
|
|
1250
|
+
else if (go.isRequiredParameter(param.style)) {
|
|
1258
1251
|
// optional params are always in their "final" form
|
|
1259
1252
|
if (param.kind === 'headerCollectionParam' || param.kind === 'pathCollectionParam' || param.kind === 'queryCollectionParam') {
|
|
1260
1253
|
// for required params that are collections of strings, we split them inline.
|