in src/AutoRest.CSharp/Common/Output/Models/CmcRestClientBuilder.cs [232:335]
private RequestBody? BuildRequestBody(IReadOnlyDictionary<string, ParameterInfo> allParameters, BodyMediaType mediaType)
{
RequestBody? body = null;
Dictionary<InputParameter, ReferenceOrConstant> bodyParameters = new();
foreach (var (_, (requestParameter, value)) in allParameters)
{
if (requestParameter?.Location == RequestLocation.Body)
{
bodyParameters[requestParameter] = value;
}
}
if (bodyParameters.Count > 0)
{
if (mediaType == BodyMediaType.Multipart)
{
List<MultipartRequestBodyPart> value = new List<MultipartRequestBodyPart>();
foreach (var parameter in bodyParameters)
{
var type = parameter.Value.Type;
RequestBody requestBody;
if (type.Equals(typeof(string)))
{
requestBody = new TextRequestBody(parameter.Value);
}
else if (type.IsFrameworkType && type.FrameworkType == typeof(Stream))
{
requestBody = new BinaryRequestBody(parameter.Value);
}
else if (type.IsList)
{
requestBody = new BinaryCollectionRequestBody(parameter.Value);
}
else
{
throw new NotImplementedException();
}
value.Add(new MultipartRequestBodyPart(parameter.Value.Reference.Name, requestBody));
}
body = new MultipartRequestBody(value.ToArray());
}
else if (mediaType == BodyMediaType.Form)
{
UrlEncodedBody urlbody = new UrlEncodedBody();
foreach (var (bodyRequestParameter, bodyParameterValue) in bodyParameters)
{
urlbody.Add(GetRequestParameterName(bodyRequestParameter), bodyParameterValue);
}
body = urlbody;
}
else
{
Debug.Assert(bodyParameters.Count == 1);
var (bodyRequestParameter, bodyParameterValue) = bodyParameters.Single();
if (mediaType == BodyMediaType.Binary)
{
body = new BinaryRequestBody(bodyParameterValue);
}
else if (mediaType == BodyMediaType.Text)
{
body = new TextRequestBody(bodyParameterValue);
}
else
{
var serialization = SerializationBuilder.Build(
mediaType,
bodyRequestParameter.Type,
bodyParameterValue.Type,
null);
// This method has a flattened body
if (bodyRequestParameter.Kind == InputOperationParameterKind.Flattened)
{
var objectType = (SchemaObjectType)_context.TypeFactory.CreateType(bodyRequestParameter.Type).Implementation;
var initializationMap = new List<ObjectPropertyInitializer>();
foreach (var (parameter, _) in allParameters.Values)
{
if (parameter?.FlattenedBodyProperty is null)
{
continue;
}
initializationMap.Add(new ObjectPropertyInitializer(
objectType.GetPropertyForSchemaProperty(parameter.FlattenedBodyProperty, true),
allParameters[GetRequestParameterName(parameter!)].Reference));
}
body = new FlattenedSchemaRequestBody(objectType, initializationMap.ToArray(), serialization);
}
else
{
body = new SchemaRequestBody(bodyParameterValue, serialization);
}
}
}
}
return body;
}