/*
         *
         *.qtn
         *
         * enum Class {
         * Rogue, Warrior, Mage
         * }
         *
         *
         * component Character {
         * int Health;
         * int Level;
         * int Mana;
         * Class Class;
         * }
         *
         * signals, events, input-blocks.
         *
         */
        static void Main(string[] args)
        {
            // Assembly-CSharp.dll, main unity dll
            // Roslyn Source Generators ... unity support is "iffy"

            const string OUTPUT_PATH = "../../../../CodeGeneration.Target/Generated.cs";


            var input = new List <CG_Type>();

            var foo = new CG_Class()
            {
                Name = "Foo"
            };

            foo.Fields.Add((typeof(int), "test"));

            var bar = new CG_Struct()
            {
                Name = "Bar"
            };

            bar.Fields.Add((typeof(int), "test"));

            input.Add(foo);
            input.Add(bar);

            var builder = new CodeBuilder();

            builder.Using("System.Runtime.InteropServices");

            using (builder.BeginNamespace("TestNamespace")) {
                foreach (var type in input)
                {
                    if (type is CG_Class cls)
                    {
                        GenerateClass(builder, cls);
                    }

                    if (type is CG_Struct str)
                    {
                        GenerateStruct(builder, str);
                    }
                }
            }

            File.WriteAllText(OUTPUT_PATH, builder.ToString());
        }
 static void GenerateClass(CodeBuilder builder, CG_Class cls)
 {
     using (builder.BeginClass(cls.Name)) {
         GenerateFields(builder, cls.Fields);
     }
 }