private static EndpointMetadata ReadOperations(string path, IDictionary <OperationType, OpenApiOperation> operations) { EndpointMetadata endpointMetadata = new EndpointMetadata(path); if (operations is not null) { foreach (KeyValuePair <OperationType, OpenApiOperation> operation in operations) { RequestMetadata requestMetadata = new RequestMetadata(operation.Key); foreach (OpenApiParameter parameter in operation.Value.Parameters) { requestMetadata.Parameters.Add(parameter); } if (operation.Value.RequestBody?.Content is not null) { foreach (KeyValuePair <string, OpenApiMediaType> content in operation.Value.RequestBody.Content) { string contentType = content.Key; bool isRequired = operation.Value.RequestBody.Required; OpenApiSchema schema = content.Value?.Schema; requestMetadata.Content.Add(new RequestContentMetadata(contentType, isRequired, schema)); } } endpointMetadata.AvailableRequests.Add(requestMetadata); } } return(endpointMetadata); }
private static DirectoryStructure BuildDirectoryStructure(IList <EndpointMetadata> metadata) { DirectoryStructure d = new DirectoryStructure(null); if (metadata is not null) { for (int index = 0; index < metadata.Count; index++) { System.Diagnostics.Debug.WriteLine(index); EndpointMetadata entry = metadata[index]; ApiDefinitionReader.FillDirectoryInfo(d, entry); } } return(d); }
private static IList <EndpointMetadata> ReadPaths(OpenApiDocument openApiDocument) { List <EndpointMetadata> metadata = new List <EndpointMetadata>(); if (openApiDocument.Paths is not null) { foreach (KeyValuePair <string, OpenApiPathItem> path in openApiDocument.Paths) { string relativeUrl = path.Key; EndpointMetadata endpointMetadata = ReadOperations(relativeUrl, path.Value.Operations); metadata.Add(endpointMetadata); } } return(metadata); }
public static void FillDirectoryInfo(DirectoryStructure parent, EndpointMetadata entry) { entry = entry ?? throw new ArgumentNullException(nameof(entry)); parent = parent ?? throw new ArgumentNullException(nameof(parent)); string[] parts = entry.Path.Split('/'); foreach (string part in parts) { if (!string.IsNullOrEmpty(part) && parent is object) { parent = parent.DeclareDirectory(part); } } RequestInfo dirRequestInfo = new RequestInfo(); foreach (RequestMetadata requestMetadata in entry.AvailableRequests) { string method = requestMetadata.Operation.ToString(); foreach (RequestContentMetadata content in requestMetadata.Content) { if (string.IsNullOrWhiteSpace(content.ContentType)) { dirRequestInfo.SetFallbackRequestBody(method, content.ContentType, SchemaDataGenerator.GetBodyString(content.BodySchema)); } dirRequestInfo.SetRequestBody(method, content.ContentType, SchemaDataGenerator.GetBodyString(content.BodySchema)); } dirRequestInfo.AddMethod(requestMetadata.Operation.ToString()); } if (dirRequestInfo.Methods.Count > 0 && parent is object) { parent.RequestInfo = dirRequestInfo; } }
public static void FillDirectoryInfo(DirectoryStructure parent, EndpointMetadata entry) { entry = entry ?? throw new ArgumentNullException(nameof(entry)); parent = parent ?? throw new ArgumentNullException(nameof(parent)); string[] parts = entry.Path.Split('/'); foreach (string part in parts) { if (!string.IsNullOrEmpty(part) && parent is object) { parent = parent.DeclareDirectory(part); } } RequestInfo dirRequestInfo = new RequestInfo(); foreach (KeyValuePair <string, IReadOnlyDictionary <string, IReadOnlyList <Parameter> > > requestInfo in entry.AvailableRequests) { string method = requestInfo.Key; foreach (KeyValuePair <string, IReadOnlyList <Parameter> > parameterSetsByContentType in requestInfo.Value) { if (string.IsNullOrEmpty(parameterSetsByContentType.Key)) { dirRequestInfo.SetFallbackRequestBody(method, parameterSetsByContentType.Key, SchemaDataGenerator.GetBodyString(parameterSetsByContentType.Value)); } dirRequestInfo.SetRequestBody(method, parameterSetsByContentType.Key, SchemaDataGenerator.GetBodyString(parameterSetsByContentType.Value)); } dirRequestInfo.AddMethod(method); } if (dirRequestInfo.Methods.Count > 0 && parent is object) { parent.RequestInfo = dirRequestInfo; } }