private Method BuildAddMethod()

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);
        }