Ejemplo n.º 1
0
        public static ParsingContext Parse(Stream stream)
        {
            RootNode rootNode;
            var      context = new ParsingContext();

            try
            {
                var yamlStream = new YamlStream();
                yamlStream.Load(new StreamReader(stream));

                var yamlDocument = yamlStream.Documents.First();
                rootNode = new RootNode(context, yamlDocument);
            }
            catch (SharpYaml.SyntaxErrorException ex)
            {
                context.ParseErrors.Add(new OpenApiError("", ex.Message));
                context.OpenApiDocument = new OpenApiDocument();  // Could leave this null?
                return(context);
            }

            var inputVersion = GetVersion(rootNode);

            switch (inputVersion)
            {
            case "2.0":
                context.SetReferenceService(new ReferenceService(rootNode)
                {
                    loadReference  = OpenApiV2Reader.LoadReference,
                    parseReference = p => OpenApiV2Reader.ParseReference(p)
                });
                context.OpenApiDocument = OpenApiV2Reader.LoadOpenApi(rootNode);
                break;

            default:
                context.SetReferenceService(new ReferenceService(rootNode)
                {
                    loadReference  = OpenApiV3Reader.LoadReference,
                    parseReference = p => new OpenApiReference(p)
                });
                context.OpenApiDocument = OpenApiV3Reader.LoadOpenApi(rootNode);
                break;
            }
            return(context);
        }
Ejemplo n.º 2
0
        public static IReference LoadReference(OpenApiReference pointer, RootNode rootNode)
        {
            IReference referencedObject = null;

            var node = rootNode.Find(pointer.GetLocalPointer());

            if (node == null && pointer.ReferenceType != ReferenceType.Tags)
            {
                return(null);
            }

            switch (pointer.ReferenceType)
            {
            case ReferenceType.Schema:
                referencedObject = OpenApiV3Reader.LoadSchema(node);
                break;

            case ReferenceType.Parameter:

                referencedObject = OpenApiV3Reader.LoadParameter(node);
                break;

            case ReferenceType.Callback:
                referencedObject = OpenApiV3Reader.LoadCallback(node);
                break;

            case ReferenceType.SecurityScheme:
                referencedObject = OpenApiV3Reader.LoadSecurityScheme(node);
                break;

            case ReferenceType.Link:
                referencedObject = OpenApiV3Reader.LoadLink(node);
                break;

            case ReferenceType.Example:
                referencedObject = OpenApiV3Reader.LoadExample(node);
                break;

            case ReferenceType.Tags:
                ListNode list = (ListNode)node;
                if (list != null)
                {
                    foreach (var item in list)
                    {
                        var tag = OpenApiV3Reader.LoadTag(item);

                        if (tag.Name == pointer.TypeName)
                        {
                            return(tag);
                        }
                    }
                }
                else
                {
                    return(new Tag()
                    {
                        Name = pointer.TypeName
                    });
                }

                break;

            default:
                throw new DomainParseException($"Unknown type of $ref {pointer.ReferenceType} at {pointer.ToString()}");
            }
            return(referencedObject);
        }