static Model.TypeDefinition GetTypeDef(ulong id, Model.SchemaModel model) { foreach (var defs in model.FilesToGenerate.Select(f => f.NestedTypes)) { if (GetTypeDef(id, defs) is Model.TypeDefinition def) { return(def); } } return(null); }
static (Model.SchemaModel, CodeGen.CodeGenerator, string) LoadAndGenerate(params string[] inputNames) { Model.SchemaModel firstModel = null; CodeGen.CodeGenerator firstCodeGen = null; Model.SchemaModel LocalLoad(string name) { var model = Load(name); firstModel = firstModel ?? model; return(model); } CodeGen.CodeGenerator CreateCodeGen(Model.SchemaModel model) { var codegen = new CodeGen.CodeGenerator(model, new CodeGen.GeneratorOptions()); firstCodeGen = firstCodeGen ?? codegen; return(codegen); } var codes = ( from name in inputNames let model = LocalLoad(name) let codegen = CreateCodeGen(model) from file in model.FilesToGenerate select codegen.Transform(file)).ToArray(); Assert.AreEqual( Util.InlineAssemblyCompiler.CompileSummary.Success, Util.InlineAssemblyCompiler.TryCompileCapnp( Microsoft.CodeAnalysis.NullableContextOptions.Disable, codes), "Compilation was not successful with no warnings"); return(firstModel, firstCodeGen, codes[0]);
static CodeGen.CodeGenerator NewGeneratorFor(Model.SchemaModel model) => new CodeGen.CodeGenerator(model, new CodeGen.GeneratorOptions());