public void ParseCustomExtension() { var description = @" openapi: 3.0.0 info: title: A doc with an extension version: 1.0.0 x-foo: bar: hey baz: hi! paths: {} "; var settings = new OpenApiReaderSettings() { ExtensionParsers = { { "x-foo", (a, v) => { var fooNode = (OpenApiObject)a; return(new FooExtension() { Bar = (fooNode["bar"] as OpenApiString)?.Value, Baz = (fooNode["baz"] as OpenApiString)?.Value }); } } } }; var reader = new OpenApiStringReader(settings); var diag = new OpenApiDiagnostic(); var doc = reader.Read(description, out diag); var fooExtension = doc.Info.Extensions["x-foo"] as FooExtension; fooExtension.Should().NotBeNull(); fooExtension.Bar.Should().Be("hey"); fooExtension.Baz.Should().Be("hi!"); }
public void TestWithUnknownSecurityScheme() { var settings = new OpenApiReaderSettings { ReferenceResolution = ReferenceResolutionSetting.DoNotResolveReferences }; Assert.Throws <ArgumentException>(() => TestUtils.GetOpenAPICompare().FromLocations(OpenapiDoc3, OpenapiDoc3, settings)); }
public static OpenApiReaderSettings AddTypedRest([NotNull] this OpenApiReaderSettings settings, [CanBeNull] Action <IEndpointsParserSetup> setup = null) { var parser = new EndpointsParser(); setup?.Invoke(parser); settings.ExtensionParsers.Add(EndpointList.ExtensionKey, parser.Parse); return(settings); }
private static OpenApiDocument ReadLocation(string location, List <OpenApiOAuthFlow> auths = null, OpenApiReaderSettings settings = null) { using var sr = new StreamReader(location); var openAPIDoc = new OpenApiStreamReader(settings).Read(sr.BaseStream, out var diagnostic); if (!diagnostic.Errors.IsNullOrEmpty()) { throw new Exception($"Error reading file. Error: {string.Join(", ", diagnostic.Errors)}"); } return(openAPIDoc); }
/// <summary> /// Registers the TypedRest OpenAPI extension parser. /// </summary> /// <param name="settings">The settings to register the extension parser in.</param> /// <param name="endpointRegistry">A list of all known <see cref="IEndpoint"/> kinds; leave <c>null</c> for default.</param> /// <seealso cref="OpenApiDocumentExtensions.GetTypedRest"/> public static OpenApiReaderSettings AddTypedRest(this OpenApiReaderSettings settings, EndpointRegistry?endpointRegistry = null) { var parser = new EndpointParser(endpointRegistry ?? EndpointRegistry.Default); settings.ExtensionParsers.Add(OpenApiDocumentExtensions.TypedRestKey, (data, _) => { if (!(data is OpenApiObject objData)) { throw new FormatException($"{OpenApiDocumentExtensions.TypedRestKey} is not an object."); } var entryEndpoint = new EntryEndpoint(); entryEndpoint.Parse(objData, parser); return(entryEndpoint); });
public async Task <JToken> LoadSchemaAsync(IEnumerable <string> documentUris, string?authorization) { var docs = documentUris.ToArray(); if (docs.Length != 1) { throw new ArgumentException($"Cannot load multiple OpenApiSchema using this loader [{nameof(OpenApiSchemaLoader)}]", nameof(documentUris)); } var documentUri = docs[0]; var settings = new OpenApiReaderSettings() { //ReferenceResolution = ReferenceResolutionSetting.ResolveAllReferences, }; using (var stream = await httpClient.GetStreamAsync(documentUri)) { var openApiDocument = new OpenApiStreamReader(settings).Read(stream, out var diagnostic); var resolver = new OpenApiReferenceResolver(openApiDocument); var walker = new OpenApiWalker(resolver); walker.Walk(openApiDocument); foreach (var item in resolver.Errors) { diagnostic.Errors.Add(item); } if (diagnostic.Errors.Count != 0) { var message = string.Join(Environment.NewLine, diagnostic.Errors); throw new InvalidOperationException(message); } var apiV3Json = openApiDocument.Serialize(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Json); return(JToken.Parse(apiV3Json)); } }
public ChangedOpenApiBO FromLocations(string oldLocation, string oldIdentifier, string newLocation, string newIdentifier, OpenApiReaderSettings settings = null) { return(FromSpecifications(ReadLocation(oldLocation, settings: settings), oldIdentifier, ReadLocation(newLocation, settings: settings), newIdentifier)); }
public ChangedOpenApiBO FromLocations(string oldLocation, string newLocation, OpenApiReaderSettings settings = null) { return(FromLocations(oldLocation, Path.GetFileNameWithoutExtension(oldLocation), newLocation, Path.GetFileNameWithoutExtension(newLocation), settings)); }
public OpenApiWorkspaceLoader(OpenApiWorkspace workspace, IStreamLoader loader, OpenApiReaderSettings readerSettings) { _workspace = workspace; _loader = loader; _readerSettings = readerSettings; }