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)); } }
private static void RenderJSON(OpenApiUrlSpaceNode urlspace, Stream outfile) { var writer = new Utf8JsonWriter(outfile); RenderJSON(writer, urlspace); writer.FlushAsync(); }
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); }
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); }
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(); }