Exemplo n.º 1
0
        /// <summary>
        /// avromagic auto-magically generates C# classes from an Avro Schema Registry.
        /// </summary>
        /// <param name="schemaPath">The schema registry URL or File Path</param>
        /// <param name="subjectPattern">Regex pattern to determine which schemas to retrieve</param>
        /// <param name="outputDir">Output directory where to output the generated C# classes</param>
        /// <param name="namespaceMapping">Map namespace from Producer's to Consumer's e.g. com.user:Sucrose.User</param>
        static async Task <int> Main(
            string schemaPath,
            string subjectPattern     = ".*",
            string outputDir          = ".",
            string[] namespaceMapping = null
            )
        {
            try
            {
                Console.WriteLine($"Loading schemas from [{schemaPath}]");
                var schemas = await GetSchemas(schemaPath, subjectPattern);

                var codeGen = new global::Avro.CodeGen();
                if (namespaceMapping != null)
                {
                    foreach (var mapping in namespaceMapping)
                    {
                        var parts = mapping.Split(':');
                        codeGen.NamespaceMapping[parts[0]] = parts[1];
                    }
                }

                await Task.WhenAll(
                    schemas.Select(schema => ParseSchemas(codeGen, schema))
                    );

                Console.WriteLine($"Generating code ...");
                codeGen.GenerateCode();

                Console.WriteLine($"Output code to [{Path.GetFullPath(outputDir)}]");
                codeGen.WriteTypes(outputDir);

                Console.WriteLine("Done");

                return(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ERROR: {ex.Message}");
                return(-1);
            }
        }
Exemplo n.º 2
0
 private static Task ParseSchemas(
     global::Avro.CodeGen codeGen,
     (string subject, string content) schema