public bool GenerateCode() { // Create compilationUnit var compilationUnit = SyntaxFactory.CompilationUnit(); // Create a namespace var @namespace = SyntaxProjectFactory.CreateNamespace( ApiProjectOptions, NameConstants.Endpoints, FocusOnSegmentName); // Create interface var interfaceDeclaration = SyntaxInterfaceDeclarationFactory.Create(InterfaceTypeName) .AddGeneratedCodeAttribute(ApiProjectOptions.ToolName, ApiProjectOptions.ToolVersion.ToString()) .WithLeadingTrivia(SyntaxDocumentationFactory.CreateForResults(ApiOperation, FocusOnSegmentName)); // Create interface-method interfaceDeclaration = interfaceDeclaration.AddMembers(CreateMembers()); //// TODO: var methodDeclaration = ... // Add using statement to compilationUnit var includeRestResults = interfaceDeclaration .Select <IdentifierNameSyntax>() .Any(x => x.Identifier.ValueText.Contains( $"({Microsoft.OpenApi.Models.NameConstants.Pagination}<", StringComparison.Ordinal)); compilationUnit = compilationUnit.AddUsingStatements( ProjectApiClientFactory.CreateUsingListForEndpointInterface( ApiProjectOptions, includeRestResults, OpenApiDocumentSchemaModelNameHelper.HasList(ResultTypeName), OpenApiDocumentSchemaModelNameHelper.HasSharedResponseContract( ApiProjectOptions.Document, OperationSchemaMappings, FocusOnSegmentName))); // Add interface-method to interface //// TODO: interfaceDeclaration = interfaceDeclaration.AddMembers(methodDeclaration); // Add the interface to the namespace. @namespace = @namespace.AddMembers(interfaceDeclaration); // Add namespace to compilationUnit compilationUnit = compilationUnit.AddMembers(@namespace); // Set code property Code = compilationUnit; return(true); }
public bool GenerateCode() { var interfaceTypeName = "I" + ApiOperation.GetOperationName() + NameConstants.ContractHandler; var parameterTypeName = ApiOperation.GetOperationName() + NameConstants.ContractParameters; var resultTypeName = ApiOperation.GetOperationName() + NameConstants.ContractResult; // Create compilationUnit var compilationUnit = SyntaxFactory.CompilationUnit(); // Create a namespace var @namespace = SyntaxProjectFactory.CreateNamespace( ApiProjectOptions, NameConstants.Contracts, FocusOnSegmentName); // Create interface var interfaceDeclaration = SyntaxInterfaceDeclarationFactory.Create(interfaceTypeName) .AddGeneratedCodeAttribute(ApiProjectOptions.ToolName, ApiProjectOptions.ToolVersion.ToString()) .WithLeadingTrivia(SyntaxDocumentationFactory.CreateForInterface(ApiOperation, FocusOnSegmentName)); // Create interface-method var methodDeclaration = SyntaxMethodDeclarationFactory.CreateInterfaceMethod(parameterTypeName, resultTypeName, HasParametersOrRequestBody) .WithLeadingTrivia(SyntaxDocumentationFactory.CreateForInterfaceMethod(GlobalPathParameters.Any() || ApiOperation.HasParametersOrRequestBody())); // Add using statement to compilationUnit compilationUnit = compilationUnit.AddUsingStatements(ProjectContractInterfaceFactory.CreateUsingList()); // Add interface-method to interface interfaceDeclaration = interfaceDeclaration.AddMembers(methodDeclaration); // Add the interface to the namespace. @namespace = @namespace.AddMembers(interfaceDeclaration); // Add namespace to compilationUnit compilationUnit = compilationUnit.AddMembers(@namespace); // Set code property Code = compilationUnit; return(true); }