/// <summary> /// Generates the string content creation expression. /// </summary> /// <param name="contentSyntax">The content syntax.</param> /// <param name="curlOptions">The curl options.</param> /// <returns> /// <see cref="ObjectCreationExpressionSyntax" /> expression. /// </returns> /// <remarks> /// new StringContent("{\"status\": \"resolved\"}", Encoding.UTF8, "application/json") /// </remarks> private ObjectCreationExpressionSyntax CreateStringContentCreation(ArgumentSyntax contentSyntax, CurlOptions curlOptions) { var arguments = new LinkedList <ArgumentSyntax>(); arguments.AddLast(contentSyntax); var contentHeader = curlOptions.GetHeader(HeaderNames.ContentType); if (!string.IsNullOrEmpty(contentHeader)) { var contentTypeValues = contentHeader.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); arguments.AddLast(SyntaxFactory.Argument(RoslynExtensions.CreateMemberAccessExpression("Encoding", "UTF8"))); arguments.AddLast(RoslynExtensions.CreateStringLiteralArgument(contentTypeValues[0].Trim())); } var stringContentCreation = RoslynExtensions.CreateObjectCreationExpression("StringContent", arguments.ToArray()); return(stringContentCreation); }
/// <summary> /// Generates the string content creation statements. /// </summary> /// <param name="curlOptions">The curl options.</param> /// <returns>Collection of <see cref="StatementSyntax"/>.</returns> /// <remarks> /// request.Content = new StringContent("{\"status\": \"resolved\"}", Encoding.UTF8, "application/json"); /// </remarks> private IEnumerable <StatementSyntax> CreateStringContentAssignmentStatement(CurlOptions curlOptions) { var expressions = new LinkedList <ExpressionSyntax>(); foreach (var data in curlOptions.UploadData) { if (data.IsUrlEncoded) { ExpressionSyntax dataExpression; if (data.IsFile) { dataExpression = CreateFileReadAllTextExpression(data.Content); } else { dataExpression = SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(data.Content)); } dataExpression = RoslynExtensions.CreateInvocationExpression("Uri", "EscapeDataString", SyntaxFactory.Argument(dataExpression)); if (data.HasName) { dataExpression = RoslynExtensions.CreateInterpolatedStringExpression($"{data.Name}=", dataExpression); } expressions.AddLast(dataExpression); continue; } if (data.Type == UploadDataType.BinaryFile) { var readFileExpression = CreateFileReadAllTextExpression(data.Content); expressions.AddLast(readFileExpression); continue; } if (data.Type == UploadDataType.InlineFile) { var readFileExpression = CreateFileReadAllTextExpression(data.Content); var replaceNewLines = RoslynExtensions.CreateInvocationExpression( "Regex", "Replace", SyntaxFactory.Argument(readFileExpression), RoslynExtensions.CreateStringLiteralArgument(@"(?:\r\n|\n|\r)"), SyntaxFactory.Argument(RoslynExtensions.CreateMemberAccessExpression("string", "Empty"))); expressions.AddLast(replaceNewLines); continue; } expressions.AddLast( SyntaxFactory.LiteralExpression( SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(data.Content))); } var statements = new LinkedList <StatementSyntax>(); ArgumentSyntax stringContentArgumentSyntax; if (expressions.Count > 1) { var contentListVariableName = "contentList"; statements.AddLast( SyntaxFactory.LocalDeclarationStatement( RoslynExtensions.CreateVariableFromNewObjectExpression(contentListVariableName, "List<string>"))); foreach (var expression in expressions) { statements.AddLast( SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateInvocationExpression( contentListVariableName, "Add", SyntaxFactory.Argument(expression)))); } stringContentArgumentSyntax = SyntaxFactory.Argument( RoslynExtensions.CreateInvocationExpression( "string", "Join", RoslynExtensions.CreateStringLiteralArgument("&"), SyntaxFactory.Argument(SyntaxFactory.IdentifierName(contentListVariableName)))); } else { stringContentArgumentSyntax = SyntaxFactory.Argument(expressions.First.Value); } var stringContentCreation = CreateStringContentCreation( stringContentArgumentSyntax); statements.AddLast( SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateMemberAssignmentExpression( RequestVariableName, RequestContentPropertyName, stringContentCreation))); var memberAccessExpressionSyntax = RoslynExtensions.CreateMemberAccessExpression( RoslynExtensions.CreateMemberAccessExpression( RoslynExtensions.CreateMemberAccessExpression(RequestVariableName, RequestContentPropertyName), "Headers"), "ContentType"); statements.AddLast( SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateMemberAssignmentExpression( memberAccessExpressionSyntax, RoslynExtensions.CreateInvocationExpression("MediaTypeHeaderValue", "Parse", RoslynExtensions.CreateStringLiteralArgument(curlOptions.GetHeader(HeaderNames.ContentType)))))); statements.TryAppendWhiteSpaceAtEnd(); return(statements); }