/// <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); } }
private static Task ParseSchemas( global::Avro.CodeGen codeGen, (string subject, string content) schema