Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }