2018-05-01 00:07:27 +02:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Threading.Tasks;
|
2021-10-14 06:55:19 -07:00
|
|
|
using Autofac;
|
|
|
|
|
using CommandLine;
|
|
|
|
|
using KubernetesGenerator;
|
|
|
|
|
using NSwag;
|
2018-05-01 00:07:27 +02:00
|
|
|
|
|
|
|
|
namespace KubernetesWatchGenerator
|
|
|
|
|
{
|
2020-10-23 08:31:57 -07:00
|
|
|
internal class Program
|
2018-05-01 00:07:27 +02:00
|
|
|
{
|
2020-10-23 08:31:57 -07:00
|
|
|
private static async Task Main(string[] args)
|
2018-05-01 00:07:27 +02:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
await Parser.Default.ParseArguments<Options>(args)
|
|
|
|
|
.WithParsedAsync(RunAsync).ConfigureAwait(false);
|
2018-05-01 00:07:27 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
private static async Task RunAsync(Options options)
|
2018-05-01 00:07:27 +02:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
var outputDirectory = options.OutputPath;
|
2018-05-01 00:07:27 +02:00
|
|
|
|
2021-10-20 06:53:59 -07:00
|
|
|
var swaggerCooked = await OpenApiDocument.FromFileAsync(Path.Combine(outputDirectory, "swagger.json"))
|
2021-10-14 06:55:19 -07:00
|
|
|
.ConfigureAwait(false);
|
2021-10-20 06:53:59 -07:00
|
|
|
var swaggerUnprocessed = await OpenApiDocument
|
2021-10-14 06:55:19 -07:00
|
|
|
.FromFileAsync(Path.Combine(outputDirectory, "swagger.json.unprocessed"))
|
|
|
|
|
.ConfigureAwait(false);
|
2018-05-01 00:07:27 +02:00
|
|
|
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
var builder = new ContainerBuilder();
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<ClassNameHelper>()
|
|
|
|
|
.WithParameter(new NamedParameter(nameof(swaggerCooked), swaggerCooked))
|
|
|
|
|
.WithParameter(new NamedParameter(nameof(swaggerUnprocessed), swaggerUnprocessed))
|
|
|
|
|
.AsSelf()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<StringHelpers>()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2018-05-01 00:07:27 +02:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<MetaHelper>()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2018-05-01 00:07:27 +02:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<PluralHelper>()
|
2021-10-20 06:53:59 -07:00
|
|
|
.WithParameter(new TypedParameter(typeof(OpenApiDocument), swaggerUnprocessed))
|
2021-10-14 06:55:19 -07:00
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<GeneralNameHelper>()
|
|
|
|
|
.AsSelf()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2018-05-01 00:07:27 +02:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<TypeHelper>()
|
|
|
|
|
.AsSelf()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<ParamHelper>()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<UtilHelper>()
|
|
|
|
|
.AsImplementedInterfaces()
|
|
|
|
|
;
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
builder.RegisterType<ModelExtGenerator>();
|
|
|
|
|
builder.RegisterType<ModelGenerator>();
|
|
|
|
|
builder.RegisterType<ApiGenerator>();
|
|
|
|
|
builder.RegisterType<WatchGenerator>();
|
|
|
|
|
builder.RegisterType<VersionConverterGenerator>();
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
var container = builder.Build();
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
foreach (var helper in container.Resolve<IEnumerable<INustacheHelper>>())
|
2021-08-09 07:27:32 -07:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
helper.RegisterHelper();
|
2021-08-09 07:27:32 -07:00
|
|
|
}
|
|
|
|
|
|
2021-12-13 07:31:59 -08:00
|
|
|
//if (options.GenerateWatch)
|
|
|
|
|
//{
|
|
|
|
|
// container.Resolve<WatchGenerator>().Generate(swaggerUnprocessed, outputDirectory);
|
|
|
|
|
//}
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
if (options.GenerateApi)
|
2018-05-01 00:07:27 +02:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
container.Resolve<ApiGenerator>().Generate(swaggerCooked, outputDirectory);
|
2018-05-01 00:07:27 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
if (options.GenerateModel)
|
2018-05-30 04:42:34 +02:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
container.Resolve<ModelGenerator>().Generate(swaggerCooked, outputDirectory);
|
2018-05-30 04:42:34 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
if (options.GenerateModelExt)
|
2018-05-03 07:04:47 +02:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
container.Resolve<ModelExtGenerator>().Generate(swaggerUnprocessed, outputDirectory);
|
2018-05-03 07:04:47 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
if (options.GenerateVersionConverter)
|
2021-08-09 07:27:32 -07:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
container.Resolve<VersionConverterGenerator>().GenerateFromModels(outputDirectory);
|
2021-08-09 07:27:32 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA1812", Justification = "Instanced in CommandLineParser")]
|
|
|
|
|
public class Options
|
2021-08-09 07:27:32 -07:00
|
|
|
{
|
2021-10-14 06:55:19 -07:00
|
|
|
[Value(0, Required = true, HelpText = "path to src/KubernetesClient/generated")]
|
|
|
|
|
public string OutputPath { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-12-13 07:31:59 -08:00
|
|
|
//[Option("watch", Required = false, Default = true)]
|
|
|
|
|
//public bool GenerateWatch { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
[Option("api", Required = false, Default = true)]
|
|
|
|
|
public bool GenerateApi { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
[Option("model", Required = false, Default = true)]
|
|
|
|
|
public bool GenerateModel { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
[Option("modelext", Required = false, Default = true)]
|
|
|
|
|
public bool GenerateModelExt { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
|
2021-10-14 06:55:19 -07:00
|
|
|
[Option("versionconverter", Required = false, Default = false)]
|
|
|
|
|
public bool GenerateVersionConverter { get; set; }
|
2021-08-09 07:27:32 -07:00
|
|
|
}
|
2018-05-01 00:07:27 +02:00
|
|
|
}
|
|
|
|
|
}
|