Skip to content

Commit 075c152

Browse files
fix: properly set explode property for params
1 parent 71b5c41 commit 075c152

File tree

3 files changed

+625
-13
lines changed

3 files changed

+625
-13
lines changed

packages/http-client-csharp/emitter/src/lib/operation-converter.ts

+20-1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,17 @@ function fromSdkHttpOperationParameter(
185185
const parameterType = fromSdkType(p.type, sdkContext, typeMap);
186186
const format = p.kind === "header" || p.kind === "query" ? p.collectionFormat : undefined;
187187
const serializedName = p.kind !== "body" ? p.serializedName : p.name;
188+
let explode = false;
189+
190+
// TO-DO: In addition to checking if a path parameter is exploded, we should consider capturing the style for
191+
// any path expansion to ensure the parameter values are delimited correctly during serialization.
192+
if (parameterType.kind === "array" || parameterType.kind === "dict") {
193+
if (format === "multi") {
194+
explode = true;
195+
} else if (isExplodedSdkQueryParameter(p) || isExplodedSdkPathParameter(p)) {
196+
explode = true;
197+
}
198+
}
188199

189200
return {
190201
Name: p.name,
@@ -196,7 +207,7 @@ function fromSdkHttpOperationParameter(
196207
p.name.toLocaleLowerCase() === "apiversion" || p.name.toLocaleLowerCase() === "api-version",
197208
IsContentType: isContentType,
198209
IsEndpoint: false,
199-
Explode: parameterType.kind === "array" && format === "multi" ? true : false,
210+
Explode: explode,
200211
ArraySerializationDelimiter: format ? collectionFormatToDelimMap[format] : undefined,
201212
IsRequired: !p.optional,
202213
Kind: getParameterKind(p, parameterType, rootApiVersions.length > 0),
@@ -418,3 +429,11 @@ function normalizeHeaderName(name: string): string {
418429
return name;
419430
}
420431
}
432+
433+
function isExplodedSdkQueryParameter(p: any): p is SdkQueryParameter {
434+
return (p as SdkQueryParameter).explode === true && (p as SdkQueryParameter).kind === "query";
435+
}
436+
437+
function isExplodedSdkPathParameter(p: any): p is SdkPathParameter {
438+
return (p as SdkPathParameter).explode === true && (p as SdkPathParameter).kind === "path";
439+
}

0 commit comments

Comments
 (0)