Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions src/Microsoft.OpenApi.Readers/OpenApiDocumentExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Readers;

namespace Microsoft.OpenApi
{
/// <summary>
/// Loads an OpenApiDocument instance through Load/LoadAsync/Parse pattern
/// </summary>
public static class OpenApiDocumentExtensions
{
/// <summary>
/// Loads an OpenApiDocument from a file stream
/// </summary>
/// <param name="document"></param>
/// <param name="stream"></param>
/// <param name="diagnostic"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static OpenApiDocument Load(this OpenApiDocument document,
Stream stream,
out OpenApiDiagnostic diagnostic,
OpenApiReaderSettings settings = null)
{
return new OpenApiStreamReader(settings).Read(stream, out diagnostic);
}

/// <summary>
/// Loads an OpenApiDocument from a TextReader
/// </summary>
/// <param name="document"></param>
/// <param name="reader"></param>
/// <param name="diagnostic"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static OpenApiDocument Load(this OpenApiDocument document,
TextReader reader,
out OpenApiDiagnostic diagnostic,
OpenApiReaderSettings settings = null)
{
return new OpenApiTextReaderReader(settings).Read(reader, out diagnostic);
}

/// <summary>
/// Loads an OpenApiDocument from a string input
/// </summary>
/// <param name="document"></param>
/// <param name="input"></param>
/// <param name="diagnostic"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static OpenApiDocument Load(this OpenApiDocument document,
string input,
out OpenApiDiagnostic diagnostic,
OpenApiReaderSettings settings = null)
{
return new OpenApiStringReader(settings).Read(input, out diagnostic);
}

/// <summary>
/// Loads an OpenApiDocument from a string input
/// </summary>
/// <param name="document"></param>
/// <param name="input"></param>
/// <param name="diagnostic"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static OpenApiDocument Parse(this OpenApiDocument document,
string input,
out OpenApiDiagnostic diagnostic,
OpenApiReaderSettings settings = null)
{
return new OpenApiStringReader(settings).Read(input, out diagnostic);
}

/// <summary>
/// Loads an OpenApiDocument asynchronously from a TextReader
/// </summary>
/// <param name="document"></param>
/// <param name="reader"></param>
/// <param name="cancellationToken"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static Task<ReadResult> LoadAsync(this OpenApiDocument document,
TextReader reader,
OpenApiReaderSettings settings = null,
CancellationToken cancellationToken = default)
{
return new OpenApiTextReaderReader(settings).ReadAsync(reader, cancellationToken);
}

/// <summary>
/// Loads an OpenApiDocument from a file stream
/// </summary>
/// <param name="document"></param>
/// <param name="stream"></param>
/// <param name="cancellationToken"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static Task<ReadResult> LoadAsync(this OpenApiDocument document,
Stream stream,
OpenApiReaderSettings settings = null,
CancellationToken cancellationToken = default)
{
return new OpenApiStreamReader(settings).ReadAsync(stream, cancellationToken);
}
}
}
4 changes: 1 addition & 3 deletions src/Microsoft.OpenApi.Readers/OpenApiYamlDocumentReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -17,7 +15,6 @@
using Microsoft.OpenApi.Readers.Services;
using Microsoft.OpenApi.Services;
using Microsoft.OpenApi.Validations;
using SharpYaml.Serialization;

namespace Microsoft.OpenApi.Readers
{
Expand All @@ -37,6 +34,7 @@ public OpenApiYamlDocumentReader(OpenApiReaderSettings settings = null)
_settings = settings ?? new OpenApiReaderSettings();
}


/// <summary>
/// Reads the stream input and parses it into an Open API document.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ public class OpenApiWorkspaceStreamTests
public async Task LoadingDocumentWithResolveAllReferencesShouldLoadDocumentIntoWorkspace()
{
// Create a reader that will resolve all references
var reader = new OpenApiStreamReader(new OpenApiReaderSettings()
var settings = new OpenApiReaderSettings()
{
LoadExternalRefs = true,
CustomExternalLoader = new MockLoader(),
BaseUrl = new Uri("file://c:\\")
});
};

// Todo: this should be ReadAsync
var stream = new MemoryStream();
Expand All @@ -37,7 +37,7 @@ public async Task LoadingDocumentWithResolveAllReferencesShouldLoadDocumentIntoW
wr.Flush();
stream.Position = 0;

var result = await reader.ReadAsync(stream);
var result = await new OpenApiDocument().LoadAsync(stream, settings: settings);

Assert.NotNull(result.OpenApiDocument.Workspace);

Expand Down
Loading