| File: Extensions\OpenApiDocumentExtensions.cs | Web Access |
| Project: src\aspnetcore\src\OpenApi\src\Microsoft.AspNetCore.OpenApi.csproj (Microsoft.AspNetCore.OpenApi) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json.Nodes; namespace Microsoft.AspNetCore.OpenApi; internal static class OpenApiDocumentExtensions { /// <summary> /// Registers a <see cref="IOpenApiSchema" /> into the top-level components store on the /// <see cref="OpenApiDocument" /> and returns a resolvable reference to it. /// </summary> /// <param name="document">The <see cref="OpenApiDocument"/> to register the schema onto.</param> /// <param name="schemaId">The ID that serves as the key for the schema in the schema store.</param> /// <param name="schema">The <see cref="IOpenApiSchema" /> to register into the document.</param> /// <param name="schemaReference">An <see cref="IOpenApiSchema"/> with a reference to the stored schema.</param> /// <returns>Whether the schema was added or already existed.</returns> public static bool AddOpenApiSchemaByReference(this OpenApiDocument document, string schemaId, IOpenApiSchema schema, out OpenApiSchemaReference schemaReference) { // Make sure the document has a workspace, // AddComponent will add it to the workspace when adding the component. document.Workspace ??= new(); // AddComponent will only add the schema if it doesn't already exist. var schemaAdded = document.AddComponent(schemaId, schema); object? description = null; object? example = null; object? defaultAnnotation = null; if (schema is OpenApiSchema { Metadata: not null } actualSchema) { actualSchema.Metadata.TryGetValue(OpenApiConstants.RefDescriptionAnnotation, out description); actualSchema.Metadata.TryGetValue(OpenApiConstants.RefExampleAnnotation, out example); actualSchema.Metadata.TryGetValue(OpenApiConstants.RefDefaultAnnotation, out defaultAnnotation); } schemaReference = new OpenApiSchemaReference(schemaId, document) { Description = description as string, Examples = example is JsonNode exampleJson ? [exampleJson] : null, Default = defaultAnnotation as JsonNode, }; return schemaAdded; } }