in src/AutoRest.CSharp/LowLevel/AutoRest/LowLevelTarget.cs [18:112]
public static async Task ExecuteAsync(GeneratedCodeWorkspace project, InputNamespace inputNamespace, SourceInputModel? sourceInputModel, bool isTspInput)
{
var library = new DpgOutputLibraryBuilder(inputNamespace, sourceInputModel).Build(isTspInput);
foreach (var model in library.AllModels)
{
var codeWriter = new CodeWriter();
var modelWriter = new ModelWriter();
modelWriter.WriteModel(codeWriter, model);
var folderPath = Configuration.ModelNamespace ? "Models/" : "";
project.AddGeneratedFile($"{folderPath}{model.Type.Name}.cs", codeWriter.ToString());
var serializationCodeWriter = new CodeWriter();
var serializationWriter = new SerializationWriter();
serializationWriter.WriteSerialization(serializationCodeWriter, model);
project.AddGeneratedFile($"{folderPath}{model.Type.Name}.Serialization.cs", serializationCodeWriter.ToString());
}
foreach (var client in library.RestClients)
{
var dpgClientWriter = new DpgClientWriter(library, client);
dpgClientWriter.WriteClient();
project.AddGeneratedFile($"{client.Type.Name}.cs", dpgClientWriter.ToString());
var sampleProvider = library.GetSampleForClient(client);
// write samples
if (sampleProvider != null)
{
var clientExampleFilename = $"../../tests/Generated/Samples/{sampleProvider.Type.Name}.cs";
var clientSampleWriter = new CodeWriter();
new ExpressionTypeProviderWriter(clientSampleWriter, sampleProvider).Write();
project.AddGeneratedTestFile(clientExampleFilename, clientSampleWriter.ToString());
project.AddGeneratedDocFile(dpgClientWriter.XmlDocWriter.Filename, new XmlDocumentFile(clientExampleFilename, dpgClientWriter.XmlDocWriter));
}
}
var optionsWriter = new CodeWriter();
ClientOptionsWriter.WriteClientOptions(optionsWriter, library.ClientOptions);
project.AddGeneratedFile($"{library.ClientOptions.Type.Name}.cs", optionsWriter.ToString());
if (Configuration.IsBranded)
{
var extensionWriter = new AspDotNetExtensionWriter(library.AspDotNetExtension);
extensionWriter.Write();
project.AddGeneratedFile($"{library.AspDotNetExtension.Type.Name}.cs", extensionWriter.ToString());
}
var modelFactoryProvider = library.ModelFactory;
if (modelFactoryProvider != null)
{
var modelFactoryWriter = new ModelFactoryWriter(modelFactoryProvider);
modelFactoryWriter.Write();
project.AddGeneratedFile($"{modelFactoryProvider.Type.Name}.cs", modelFactoryWriter.ToString());
}
if (Configuration.GenerateTestProject)
{
if (Configuration.IsBranded)
{
// write test base and test env
var testBaseWriter = new CodeWriter();
new ExpressionTypeProviderWriter(testBaseWriter, library.DpgTestBase).Write();
project.AddGeneratedTestFile($"../../tests/Generated/Tests/{library.DpgTestBase.Type.Name}.cs", testBaseWriter.ToString());
var testEnvWriter = new CodeWriter();
new ExpressionTypeProviderWriter(testEnvWriter, library.DpgTestEnvironment).Write();
project.AddGeneratedTestFile($"../../tests/Generated/Tests/{library.DpgTestEnvironment.Type.Name}.cs", testEnvWriter.ToString());
}
// write the client test files
foreach (var client in library.RestClients)
{
var clientTestProvider = library.GetTestForClient(client);
if (clientTestProvider != null)
{
var clientTestFilename = $"../../tests/Generated/Tests/{clientTestProvider.Type.Name}.cs";
var clientTestWriter = new CodeWriter();
new ExpressionTypeProviderWriter(clientTestWriter, clientTestProvider).Write();
project.AddGeneratedTestFile(clientTestFilename, clientTestWriter.ToString());
}
}
}
foreach (var helper in ExpressionTypeProvider.GetHelperProviders())
{
var helperWriter = new CodeWriter();
new ExpressionTypeProviderWriter(helperWriter, helper).Write();
project.AddGeneratedFile($"Internal/{helper.Type.Name}.cs", helperWriter.ToString());
}
await project.PostProcessAsync(new PostProcessor(
modelsToKeep: library.AccessOverriddenModels.ToImmutableHashSet(),
modelFactoryFullName: modelFactoryProvider?.FullName,
aspExtensionClassName: library.AspDotNetExtension.FullName));
}