static void Main(string[] args) { if (args.Length != 2) { Console.Write("Please provide exactly two parameters to: input file full path (yaml) and output file full path (pdf)"); return; } var input = args[0]; if (!File.Exists(input)) { Console.WriteLine("Input file does not exist: " + input); return; } var output = args[1]; if (File.Exists(output)) { Console.WriteLine("Output file already exists: " + output); return; } var job = JobReader.Read(input); Console.WriteLine("Succesfully read job: " + job.Name); var invoice = Calculator.Calculate(job, "Customer name"); Console.WriteLine("Generated invoice, total amount: " + invoice.TotalAmount); InvoiceWriter.Write(invoice, output); Console.WriteLine("Saved invoice to: " + output); }
/// <summary> /// User has requested the generation of code given an assembly and specification file. /// </summary> /// <param name="specification"></param> /// <param name="assembly"></param> /// <param name="outputPath"></param> public static void GenerateCode(FileInfo specification, FileInfo assembly, string outputPath = default) { if (specification == null) { throw new ArgumentException(Resources.NoSpecificationFileProvided, nameof(specification)); } // register the appropriate style class for its related type key. Each type in the specification needs to have a 'style' specified // for it to be able to generate the appropriate type of code for it. TypeGeneratorStore.Instance.Register(global::Birch.Generator.Styles.Extension.Style.Type, () => new global::Birch.Generator.Styles.Extension.Style()); TypeGeneratorStore.Instance.Register(global::Birch.Generator.Styles.Class.Style.Type, () => new global::Birch.Generator.Styles.Class.Style()); var job = JobReader.FromFile(Path.Join(specification.DirectoryName, specification.Name)); var outputTypeStore = OutputTypesStore.Create(job.Configuration.OutputTypes); var typeStore = new TypeStore(); typeStore.Load(Path.Join(assembly.DirectoryName, assembly.Name)); var modelBuilder = new ModelBuilder(typeStore, outputTypeStore); var models = modelBuilder.Create(job); var codeBuilder = new CodeBuilder(job); var output = codeBuilder.Create(models); if (outputPath != null) { File.WriteAllText(outputPath, output); Console.WriteLine(Resources.CodeWrittenTo, outputPath); } else { Console.WriteLine(output); } }