public void Generate(OpenApiSpecModel inputSpec) { //TODO //need better way to do this - factory? var keyStore = new ObjectsProcessingKeyStore(); foreach (var definition in inputSpec.Definitions) { if (!CurrentTypeHolder.Types.TryGetValue(definition.Key, out var defined)) { CurrentTypeHolder.Types[definition.Key] = _typeResolver.GetType(_objectGenerationService, keyStore, definition.Value, inputSpec.Definitions, definition.Key); } } foreach (var endpoint in inputSpec.Endpoints) { var converted = _endpointService.GenerateEndpoint(endpoint, keyStore); converted.ApiId = inputSpec.Info.Title; CurrentEndpointHolder.Endpoints[endpoint.ShortName] = converted; } }
public IEnumerable <Endpoint> Import(string filePath, string overwriteTitle, string pwd) { // handle relative paths filePath = _filePathService.FormatPath(filePath, pwd); if (!filePath.Contains(".")) { throw new ArgumentException("No file extension detected"); } var fileExtension = filePath.Split('.').Last(); var apiId = ""; OpenApiSpecModel openApiModel = null; var fileStream = File.OpenRead(filePath); switch (fileExtension) { case "yml": case "yaml": openApiModel = _yamlParseService.ExtractSpec(fileStream, overwriteTitle); break; case "json": openApiModel = _jsonParseService.ExtractSpec(fileStream, overwriteTitle); break; default: throw new FormatException("Can only accept .yml/.yaml or .json Open Api/Swagger files"); } apiId = openApiModel.Info.Title; _typeGenerationService.Generate(openApiModel); return(CurrentEndpointHolder.Endpoints.Values.Where(e => e.ApiId == apiId)); }
public OpenApiSpecModel ExtractSpec(FileStream file, string overwriteApiTitle) { var output = new OpenApiSpecModel(); var serializer = new JsonSerializer(); serializer.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; JsonSpecModel jsonModel; using (var reader = new StreamReader(file)) { using (var jsonReader = new JsonTextReader(reader)) { jsonModel = serializer.Deserialize <JsonSpecModel>(jsonReader); } } output.Info = jsonModel.Info; if (!string.IsNullOrEmpty(overwriteApiTitle)) { output.Info.Title = overwriteApiTitle; } output.Definitions = new Dictionary <string, IOpenApiType>(); if (jsonModel.Definitions != null) { foreach (var definedType in jsonModel.Definitions) { output.Definitions[definedType.Key] = _typeParser.Parse(_objectParser, definedType.Value); } } if (jsonModel.Paths != null) { output.Endpoints = _endpointsParser.Parse(jsonModel.Paths); _shortNameService.CreateOrUpdateShortNames(output.Endpoints); } return(output); }
public OpenApiSpecModel ExtractSpec(FileStream file, string overwriteApiTitle) { var output = new OpenApiSpecModel(); var deserializer = new DeserializerBuilder() .WithNamingConvention(new CamelCaseNamingConvention()) .IgnoreUnmatchedProperties() .Build(); YamlSpecModel yamlModel; using (var reader = new StreamReader(file)) { yamlModel = deserializer.Deserialize <YamlSpecModel>(reader); } output.Info = yamlModel.Info; if (!string.IsNullOrEmpty(overwriteApiTitle)) { output.Info.Title = overwriteApiTitle; } output.Definitions = new Dictionary <string, IOpenApiType>(); foreach (var definedType in yamlModel.Components.Schemas) { output.Definitions[definedType.Key] = _typeParser.Parse(_objectParser, definedType.Value); } if (yamlModel.Paths != null) { output.Endpoints = _endpointsParser.Parse(yamlModel.Paths); _shortNameService.CreateOrUpdateShortNames(output.Endpoints); } return(output); }