in src/AutoRest.CSharp/Common/Output/Models/Types/HelperTypeProviders/MultipartFormDataRequestContentProvider.cs [160:236]
private Method BuildAddMethod<T>()
{
var contentParam = new Parameter("content", null, typeof(T), null, ValidationType.None, null);
var nameParam = new Parameter("name", null, typeof(string), null, ValidationType.None, null);
var filenameParam = new Parameter("filename", null, new CSharpType(typeof(string), true),
Constant.Default(new CSharpType(typeof(string), true)), ValidationType.None, null);
var contentTypeParam = new Parameter("contentType", null, new CSharpType(typeof(string), true),
Constant.Default(new CSharpType(typeof(string), true)), ValidationType.None, null);
var signature = new MethodSignature(
Name: _addMethodName,
Summary: null,
Description: null,
Modifiers: MethodSignatureModifiers.Public,
ReturnType: null,
ReturnDescription: null,
Parameters: new[]
{
contentParam,
nameParam,
filenameParam,
contentTypeParam
});
MethodBodyStatement? valueDelareStatement = null;
ValueExpression contentExpression = New.Instance(typeof(ByteArrayContent), contentParam);
Type contentParamType = typeof(T);
if (contentParamType == typeof(Stream))
{
contentExpression = New.Instance(typeof(StreamContent), contentParam);
}
else if (contentParamType == typeof(string))
{
contentExpression = New.Instance(typeof(StringContent), contentParam);
}
else if (contentParamType == typeof(bool))
{
var boolToStringValue = new TernaryConditionalOperator(contentParam, Literal("true"), Literal("false"));
valueDelareStatement = Declare(typeof(string), "value", boolToStringValue, out TypedValueExpression boolVariable);
contentExpression = New.Instance(typeof(StringContent), boolVariable);
}
else if (contentParamType == typeof(int)
|| contentParamType == typeof(float)
|| contentParamType == typeof(long)
|| contentParamType == typeof(double)
|| contentParamType == typeof(decimal))
{
ValueExpression invariantCulture = new MemberExpression(typeof(CultureInfo), nameof(CultureInfo.InvariantCulture));
var invariantCultureValue = new InvokeInstanceMethodExpression(contentParam, nameof(Int32.ToString), new[] { Literal("G"), invariantCulture }, null, false);
valueDelareStatement = Declare(typeof(string), "value", invariantCultureValue, out TypedValueExpression variable);
contentExpression = New.Instance(typeof(StringContent), variable);
}
else if (contentParamType == typeof(BinaryData))
{
contentExpression = New.Instance(typeof(ByteArrayContent), new BinaryDataExpression(contentParam).ToArray());
}
else if (contentParamType == typeof(byte[]))
{
contentExpression = New.Instance(typeof(ByteArrayContent), contentParam);
}
else
{
throw new NotSupportedException($"{contentParamType} is not supported");
}
List<MethodBodyStatement> addContentStatements = new List<MethodBodyStatement>();
if (valueDelareStatement != null)
{
addContentStatements.Add(valueDelareStatement);
}
addContentStatements.Add(new InvokeInstanceMethodStatement(null, _addMethodName, new[] { contentExpression, nameParam, filenameParam, contentTypeParam }, false));
var body = new MethodBodyStatement[]
{
Argument.AssertNotNull(contentParam),
Argument.AssertNotNullOrEmpty(nameParam),
EmptyLine,
addContentStatements.ToArray(),
};
return new Method(signature, body);
}