public async Task <GeneratedCodeWorkspace> ExecuteAsync(CodeModel codeModel, Configuration configuration) { Directory.CreateDirectory(configuration.OutputFolder); var project = GeneratedCodeWorkspace.Create(configuration.OutputFolder, configuration.SharedSourceFolder); var sourceInputModel = new SourceInputModel(await project.GetCompilationAsync()); var context = new BuildContext(codeModel, configuration, sourceInputModel); var modelWriter = new ModelWriter(); var clientWriter = new ClientWriter(); var restClientWriter = new RestClientWriter(); var serializeWriter = new SerializationWriter(); var headerModelModelWriter = new ResponseHeaderGroupWriter(); foreach (var model in context.Library.Models) { var codeWriter = new CodeWriter(); modelWriter.WriteModel(codeWriter, model); var serializerCodeWriter = new CodeWriter(); serializeWriter.WriteSerialization(serializerCodeWriter, model); var name = model.Type.Name; project.AddGeneratedFile($"Models/{name}.cs", codeWriter.ToString()); project.AddGeneratedFile($"Models/{name}.Serialization.cs", serializerCodeWriter.ToString()); } foreach (var client in context.Library.RestClients) { var restCodeWriter = new CodeWriter(); restClientWriter.WriteClient(restCodeWriter, client); project.AddGeneratedFile($"{client.Type.Name}.cs", restCodeWriter.ToString()); } foreach (ResponseHeaderGroupType responseHeaderModel in context.Library.HeaderModels) { var headerModelCodeWriter = new CodeWriter(); headerModelModelWriter.WriteHeaderModel(headerModelCodeWriter, responseHeaderModel); project.AddGeneratedFile($"{responseHeaderModel.Type.Name}.cs", headerModelCodeWriter.ToString()); } foreach (var client in context.Library.Clients) { var codeWriter = new CodeWriter(); clientWriter.WriteClient(codeWriter, client, context.Configuration); project.AddGeneratedFile($"{client.Type.Name}.cs", codeWriter.ToString()); } foreach (var operation in context.Library.LongRunningOperations) { var codeWriter = new CodeWriter(); LongRunningOperationWriter.Write(codeWriter, operation); project.AddGeneratedFile($"{operation.Type.Name}.cs", codeWriter.ToString()); } if (context.Configuration.AzureArm) { var codeWriter = new CodeWriter(); ManagementClientWriter.WriteClientOptions(codeWriter, context); project.AddGeneratedFile($"{context.Configuration.LibraryName}ManagementClientOptions.cs", codeWriter.ToString()); var clientCodeWriter = new CodeWriter(); ManagementClientWriter.WriteAggregateClient(clientCodeWriter, context); project.AddGeneratedFile($"{context.Configuration.LibraryName}ManagementClient.cs", clientCodeWriter.ToString()); } return(project); }
public BuildContext(CodeModel codeModel, Configuration configuration, SourceInputModel sourceInputModel) { CodeModel = codeModel; Configuration = configuration; SourceInputModel = sourceInputModel; }