From 9ceeb1e5d500b94db3b1411b62dbf5ed38d669e1 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 28 May 2024 13:20:30 +0800 Subject: [PATCH] calculate multipart usage --- .../emitter/src/lib/client-model-builder.ts | 31 +++++++++++++++---- .../emitter/src/type/usage.ts | 1 + 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/http-client-csharp/emitter/src/lib/client-model-builder.ts b/packages/http-client-csharp/emitter/src/lib/client-model-builder.ts index c81c2e22c18..3d8f4fef27e 100644 --- a/packages/http-client-csharp/emitter/src/lib/client-model-builder.ts +++ b/packages/http-client-csharp/emitter/src/lib/client-model-builder.ts @@ -140,8 +140,33 @@ export function createModelForService( addChildClients(sdkContext.emitContext, client, clients); } + navigateModels(sdkContext, modelMap, enumMap); + + const usages = getUsages(sdkContext, convenienceOperations, modelMap); + setUsage(usages, modelMap); + setUsage(usages, enumMap); + for (const client of clients) { for (const op of client.Operations) { + /* TODO: remove this when adopt tcgc. + *set Multipart usage for models. + */ + const bodyParameter = op.Parameters.find((value) => value.Location === RequestLocation.Body); + if (bodyParameter && bodyParameter.Type && (bodyParameter.Type as InputModelType)) { + const inputModelType = bodyParameter.Type as InputModelType; + op.RequestMediaTypes?.forEach((item) => { + if (item === "multipart/form-data" && !inputModelType.Usage.includes(Usage.Multipart)) { + if (inputModelType.Usage.trim().length === 0) { + inputModelType.Usage = inputModelType.Usage.concat(Usage.Multipart); + } else { + inputModelType.Usage = inputModelType.Usage.trim() + .concat(",") + .concat(Usage.Multipart); + } + } + }); + } + const apiVersionIndex = op.Parameters.findIndex( (value: InputParameter) => value.IsApiVersion ); @@ -159,12 +184,6 @@ export function createModelForService( } } - navigateModels(sdkContext, modelMap, enumMap); - - const usages = getUsages(sdkContext, convenienceOperations, modelMap); - setUsage(usages, modelMap); - setUsage(usages, enumMap); - const clientModel = { Name: namespace, Description: description, diff --git a/packages/http-client-csharp/emitter/src/type/usage.ts b/packages/http-client-csharp/emitter/src/type/usage.ts index b32d287fdaa..ee9209f2f08 100644 --- a/packages/http-client-csharp/emitter/src/type/usage.ts +++ b/packages/http-client-csharp/emitter/src/type/usage.ts @@ -6,4 +6,5 @@ export enum Usage { Input = "Input", Output = "Output", RoundTrip = "RoundTrip", + Multipart = "Multipart", }