예제 #1
0
        private OpenApiUrlSpaceNode Attach(IEnumerable <string> segments, OpenApiPathItem pathItem, string layer)
        {
            var segment = segments.FirstOrDefault();

            if (string.IsNullOrEmpty(segment))
            {
                if (PathItem == null)
                {
                    PathItem = pathItem;
                    Layer    = layer;
                }
                return(this);
            }

            // If the child segment has already been defined, then insert into it
            if (Children.ContainsKey(segment))
            {
                return(Children[segment].Attach(segments.Skip(1), pathItem, layer));
            }
            else
            {
                var node = new OpenApiUrlSpaceNode(segment);
                Children[segment] = node;
                return(node.Attach(segments.Skip(1), pathItem, layer));
            }
        }
예제 #2
0
        private static void RenderJSON(OpenApiUrlSpaceNode urlspace, Stream outfile)
        {
            var writer = new Utf8JsonWriter(outfile);

            RenderJSON(writer, urlspace);
            writer.FlushAsync();
        }
예제 #3
0
        public async Task Post()
        {
            var csdl = await new StreamReader(Request.Body).ReadToEndAsync();

            var v1Doc = await this.openApiService.GetOpenApiDocumentAsync("v1.0");

            var urlspace = OpenApiUrlSpaceNode.Create(v1Doc, "v1");

            var betaDoc = await this.openApiService.GetOpenApiDocumentAsync("beta");

            urlspace.Attach(betaDoc, "beta");

            // Get OpenAPI for current CSDL.
            if (!string.IsNullOrWhiteSpace(csdl))
            {
                try
                {
                    var currentReview = await this.openApiService.ConvertCsdlUntilOpenApiDocumentAsync(csdl);

                    urlspace.Attach(currentReview, "current");
                }
                catch
                {
                    // Show the tree anyway
                }
            }

            Response.ContentType = "application/json";
            Response.StatusCode  = 200;
            RenderJSON(urlspace, Response.Body);
        }
예제 #4
0
        public static OpenApiUrlSpaceNode Create(OpenApiDocument doc, string layer)
        {
            OpenApiUrlSpaceNode root = null;

            var paths = doc?.Paths;

            if (paths != null)
            {
                root = new OpenApiUrlSpaceNode("");

                foreach (var path in paths)
                {
                    root.Attach(path.Key, path.Value, layer);
                }
            }
            return(root);
        }
예제 #5
0
        static void RenderJSON(Utf8JsonWriter writer, OpenApiUrlSpaceNode node)
        {
            writer.WriteStartObject();
            writer.WriteString("segment", node.Segment);
            writer.WriteString("layer", node.Layer);

            if (node.Children.Count() > 0)
            {
                writer.WriteStartArray("children");
                foreach (var child in node.Children.ToImmutableSortedDictionary().Values)
                {
                    RenderJSON(writer, child);
                }
                writer.WriteEndArray();
            }
            writer.WriteEndObject();
        }