using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Autofac; using CommandLine; using KubernetesGenerator; using NSwag; namespace KubernetesWatchGenerator { internal class Program { private static async Task Main(string[] args) { await Parser.Default.ParseArguments(args) .WithParsedAsync(RunAsync).ConfigureAwait(false); } private static async Task RunAsync(Options options) { var outputDirectory = options.OutputPath; var swaggerCooked = await OpenApiDocument.FromFileAsync(Path.Combine(outputDirectory, "swagger.json")) .ConfigureAwait(false); var swaggerUnprocessed = await OpenApiDocument .FromFileAsync(Path.Combine(outputDirectory, "swagger.json.unprocessed")) .ConfigureAwait(false); var builder = new ContainerBuilder(); builder.RegisterType() .WithParameter(new NamedParameter(nameof(swaggerCooked), swaggerCooked)) .WithParameter(new NamedParameter(nameof(swaggerUnprocessed), swaggerUnprocessed)) .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .WithParameter(new TypedParameter(typeof(OpenApiDocument), swaggerUnprocessed)) .AsImplementedInterfaces() ; builder.RegisterType() .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType(); builder.RegisterType(); builder.RegisterType(); var container = builder.Build(); foreach (var helper in container.Resolve>()) { helper.RegisterHelper(); } if (options.GenerateApi) { container.Resolve().Generate(swaggerCooked, outputDirectory); } if (options.GenerateModel) { container.Resolve().Generate(swaggerCooked, outputDirectory); } if (options.GenerateModelExt) { container.Resolve().Generate(swaggerUnprocessed, outputDirectory); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA1812", Justification = "Instanced in CommandLineParser")] public class Options { [Value(0, Required = true, HelpText = "path to src/KubernetesClient/generated")] public string OutputPath { get; set; } [Option("api", Required = false, Default = true)] public bool GenerateApi { get; set; } [Option("model", Required = false, Default = true)] public bool GenerateModel { get; set; } [Option("modelext", Required = false, Default = true)] public bool GenerateModelExt { get; set; } } } }