/// <summary> /// Reads the stream input and parses the fragment of an OpenAPI description into an Open API Element. /// </summary> /// <param name="input">TextReader containing OpenAPI description to parse.</param> /// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param> /// <param name="diagnostic">Returns diagnostic object containing errors detected during parsing</param> /// <returns>Instance of newly created OpenApiDocument</returns> public T ReadFragment <T>(YamlDocument input, OpenApiSpecVersion version, out OpenApiDiagnostic diagnostic) where T : IOpenApiElement { diagnostic = new OpenApiDiagnostic(); var context = new ParsingContext(diagnostic) { ExtensionParsers = _settings.ExtensionParsers }; IOpenApiElement element = null; try { // Parse the OpenAPI element element = context.ParseFragment <T>(input, version); } catch (OpenApiException ex) { diagnostic.Errors.Add(new OpenApiError(ex)); } // Validate the element if (_settings.RuleSet != null && _settings.RuleSet.Rules.Count > 0) { var errors = element.Validate(_settings.RuleSet); foreach (var item in errors) { diagnostic.Errors.Add(item); } } return((T)element); }
/// <summary> /// Reads the stream input and parses the fragment of an OpenAPI description into an Open API Element. /// </summary> /// <param name="input">Stream containing OpenAPI description to parse.</param> /// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param> /// <param name="diagnostic">Returns diagnostic object containing errors detected during parsing</param> /// <returns>Instance of newly created OpenApiDocument</returns> public T ReadFragment <T>(Stream input, OpenApiSpecVersion version, out OpenApiDiagnostic diagnostic) where T : IOpenApiElement { ParsingContext context; YamlDocument yamlDocument; diagnostic = new OpenApiDiagnostic(); // Parse the YAML/JSON try { yamlDocument = LoadYamlDocument(input); } catch (YamlException ex) { diagnostic.Errors.Add(new OpenApiError($"#line={ex.Start.Line}", ex.Message)); return(default(T)); } context = new ParsingContext { ExtensionParsers = _settings.ExtensionParsers }; IOpenApiElement element = null; try { // Parse the OpenAPI element element = context.ParseFragment <T>(yamlDocument, version, diagnostic); } catch (OpenApiException ex) { diagnostic.Errors.Add(new OpenApiError(ex)); } // Validate the element if (_settings.RuleSet != null && _settings.RuleSet.Rules.Count > 0) { var errors = element.Validate(_settings.RuleSet); foreach (var item in errors) { diagnostic.Errors.Add(item); } } return((T)element); }