public IEnumerable <CodeArtifact> GenerateArtifacts(SigSpecDocument document) { var resolver = new CSharpTypeResolver(_settings.CSharpGeneratorSettings); resolver.RegisterSchemaDefinitions(document.Definitions); var artifacts = new List <CodeArtifact>(); foreach (var hub in document.Hubs) { var hubModel = new HubModel(hub.Key, hub.Value, resolver); var template = _settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Hub", hubModel); artifacts.Add(new CodeArtifact(hubModel.Name, CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Client, template.Render())); } if (_settings.GenerateDtoTypes) { var generator = new CSharpGenerator(document, _settings.CSharpGeneratorSettings, resolver); var types = generator.GenerateTypes(); return(artifacts.Concat(types)); } else { var generator = new CSharpGenerator(document, _settings.CSharpGeneratorSettings, resolver); return(artifacts.Concat(generator.GenerateTypes())); } }
/// <summary>Creates a new resolver, adds the given schema definitions and registers an exception schema if available.</summary> /// <param name="settings">The settings.</param> /// <param name="document">The document </param> public static CSharpTypeResolver CreateResolverWithExceptionSchema(CSharpGeneratorSettings settings, OpenApiDocument document) { var exceptionSchema = document.Definitions.ContainsKey("Exception") ? document.Definitions["Exception"] : null; var resolver = new CSharpTypeResolver(settings, exceptionSchema); resolver.RegisterSchemaDefinitions(document.Definitions .Where(p => p.Value != exceptionSchema) .ToDictionary(p => p.Key, p => p.Value)); return(resolver); }
public async Task CreateClient(TextWriter writer) { var interfacesToWrite = new InterfaceManager(); writer.WriteLine( $@"using Threax.AspNetCore.Halcyon.Client; using System.Threading.Tasks; using System.Collections.Generic; using System.Net.Http; using System.Linq; namespace {options.Namespace} {{" ); await WriteClient(interfacesToWrite, writer); writer.WriteLine("}"); //Write interfaces, kind of weird, no good docs for this var settings = new CSharpGeneratorSettings() { Namespace = options.Namespace, GenerateDataAnnotations = false, ClassStyle = CSharpClassStyle.Poco, RequiredPropertiesMustBeDefined = false, EnumNameGenerator = new EnumValueEnumNameGenerator(), ArrayType = "List" //This is imported in the using statements above (System.Collections.Generic.List) }; //Gather up everything to write, skip duplicate instances of the same thing Dictionary <String, CodeArtifact> codeArtifacts = new Dictionary <String, CodeArtifact>(); foreach (var item in interfacesToWrite.Interfaces) { //Remove any properties from item that are hal embeds var propertiesToRemove = item.Value.Properties.Where(i => i.Value.IsHalEmbedded()).ToList(); foreach (var remove in propertiesToRemove) { item.Value.Properties.Remove(remove.Key); } var resolver = new CSharpTypeResolver(settings); resolver.RegisterSchemaDefinitions(new Dictionary <String, JsonSchema4>() { { item.Key, item.Value } }); //Add all discovered generators var generator = new CSharpGenerator(item.Value, settings, resolver); var artifacts = generator.GenerateTypes(); foreach (var artifact in artifacts.Artifacts) { if (!codeArtifacts.ContainsKey(artifact.TypeName)) { codeArtifacts.Add(artifact.TypeName, artifact); } } } //Write the classes officially //From TypeScriptGenerator.cs GenerateFile, (NJsonSchema 9.10.49) var model = new FileTemplateModel() { Namespace = settings.Namespace ?? string.Empty, TypesCode = ConversionUtilities.TrimWhiteSpaces(string.Join("\n\n", CodeArtifactCollection.OrderByBaseDependency(codeArtifacts.Values).Select(p => p.Code))), }; var template = settings.TemplateFactory.CreateTemplate("CSharp", "File", model); var classes = ConversionUtilities.TrimWhiteSpaces(template.Render()); writer.WriteLine(classes); //End Write Interfaces }