protected virtual IEnumerable <StatementSyntax> GenerateStatements( ILocatedOpenApiElement <OpenApiOperation> operation) { ILocatedOpenApiElement <OpenApiResponses> responseSet = operation.GetResponseSet(); ILocatedOpenApiElement <OpenApiResponse> primaryResponse = responseSet .GetResponses() .OrderBy(p => p.Key) .First(); ILocatedOpenApiElement <OpenApiMediaType>?mediaType = MediaTypeSelector.Select(primaryResponse); if (mediaType != null) { yield return(ExpressionStatement(InvocationExpression( SyntaxHelpers.MemberAccess(RequestMessageParameterName, "Headers", "Accept", "Add")) .AddArgumentListArguments( Argument(ObjectCreationExpression(WellKnownTypes.System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Name) .AddArgumentListArguments( Argument(SyntaxHelpers.StringLiteral(mediaType.Key))))))); } var propertyNameFormatter = NameFormatterSelector.GetFormatter(NameKind.Property); foreach (var headerParameter in operation.Element.Parameters.Where(p => p.In == ParameterLocation.Header)) { string propertyName = propertyNameFormatter.Format(headerParameter.Name); StatementSyntax statement = ExpressionStatement(InvocationExpression( SyntaxHelpers.MemberAccess(RequestMessageParameterName, "Headers", "Add")) .AddArgumentListArguments( Argument(SyntaxHelpers.StringLiteral(headerParameter.Name)), Argument(InvocationExpression(MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SerializationNamespace.HeaderSerializerInstance, IdentifierName("Serialize"))) .AddArgumentListArguments( Argument(IdentifierName(propertyName)), Argument(headerParameter.Explode ? LiteralExpression(SyntaxKind.TrueLiteralExpression) : LiteralExpression(SyntaxKind.FalseLiteralExpression)))))); if (!headerParameter.Required) { statement = MethodHelpers.IfNotNull( IdentifierName(propertyName), Block(statement)); } yield return(statement); } }
protected virtual IEnumerable <StatementSyntax> GenerateStatements( ILocatedOpenApiElement <OpenApiOperation> operation) { yield return(GenerateRequestMessageVariable(operation)); yield return(ExpressionStatement(AddHeadersMethodGenerator.InvokeAddHeaders( ThisExpression(), IdentifierName(RequestMessageVariableName)))); yield return(ExpressionStatement(AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, SyntaxHelpers.MemberAccess(RequestMessageVariableName, "Content"), BuildContentMethodGenerator.InvokeBuildContent( ThisExpression(), IdentifierName(TypeSerializerRegistryParameterName))))); yield return(ReturnStatement(IdentifierName(RequestMessageVariableName))); }
protected virtual IEnumerable <StatementSyntax> GenerateStatements( ILocatedOpenApiElement <OpenApiResponse> response) { var propertyNameFormatter = _context.NameFormatterSelector.GetFormatter(NameKind.Property); // Declare values variable to hold TryGetValue out results yield return(LocalDeclarationStatement(VariableDeclaration( WellKnownTypes.System.Collections.Generic.IEnumerableT.Name( PredefinedType(Token(SyntaxKind.StringKeyword)))) .AddVariables(VariableDeclarator("values")))); NameSyntax valuesName = IdentifierName("values"); foreach (var header in response.GetHeaders()) { ILocatedOpenApiElement <OpenApiSchema> schemaElement = header.GetSchemaOrDefault(); TypeSyntax typeName = _context.TypeNameProvider.GetName(schemaElement); InvocationExpressionSyntax deserializeExpression = InvocationExpression(MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, _serializationNamespace.HeaderSerializerInstance, GenericName("Deserialize") .AddTypeArgumentListArguments(typeName))) .AddArgumentListArguments( Argument(valuesName), Argument(header.Element.Explode ? LiteralExpression(SyntaxKind.TrueLiteralExpression) : LiteralExpression(SyntaxKind.FalseLiteralExpression))); yield return(IfStatement( WellKnownTypes.System.Net.Http.Headers.HttpHeaders.TryGetValues( SyntaxHelpers.MemberAccess(IdentifierName("Message"), "Headers"), SyntaxHelpers.StringLiteral(header.Key), valuesName), Block( ExpressionStatement(AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, IdentifierName(propertyNameFormatter.Format(header.Key)), deserializeExpression))))); } }
protected virtual IEnumerable <StatementSyntax> GenerateStatements(ILocatedOpenApiElement <OpenApiOperation> operation) { yield return(MethodHelpers.ThrowIfArgumentNull(RequestParameterName)); yield return(GenerateAuthenticatorVariable()); yield return(GenerateRequestMessageVariable(operation)); yield return(MethodHelpers.IfNotNull( IdentifierName(AuthenticatorVariableName), Block(ExpressionStatement(SyntaxHelpers.AwaitConfiguredFalse(InvocationExpression( MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, IdentifierName(AuthenticatorVariableName), IdentifierName("ApplyAsync"))) .AddArgumentListArguments( Argument(IdentifierName(RequestMessageVariableName)), Argument(IdentifierName(MethodHelpers.CancellationTokenParameterName)))))))); yield return(LocalDeclarationStatement(VariableDeclaration(IdentifierName("var")) .AddVariables(VariableDeclarator("responseMessage") .WithInitializer(EqualsValueClause( SyntaxHelpers.AwaitConfiguredFalse(InvocationExpression( SyntaxHelpers.MemberAccess(TagTypeGenerator.HttpClientFieldName, "SendAsync")) .AddArgumentListArguments( Argument(IdentifierName(RequestMessageVariableName)), Argument(IdentifierName(MethodHelpers.CancellationTokenParameterName))))))))); yield return(MethodHelpers.IfNotNull( IdentifierName(AuthenticatorVariableName), Block(ExpressionStatement(SyntaxHelpers.AwaitConfiguredFalse(InvocationExpression( MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, IdentifierName(AuthenticatorVariableName), IdentifierName("ProcessResponseAsync"))) .AddArgumentListArguments( Argument(IdentifierName("responseMessage")), Argument(IdentifierName(MethodHelpers.CancellationTokenParameterName)))))))); yield return(ReturnStatement(GenerateResponse(operation, IdentifierName("responseMessage")))); }