Skip to content

Commit db75eed

Browse files
Merge pull request #1077 from microsoft/mk/add-summary-and-description-to-$ref
Add summary and description to OpenApiReference object
2 parents 3db2ffc + 2f131d9 commit db75eed

21 files changed

+245
-39
lines changed

src/Microsoft.OpenApi.Readers/Interface/IOpenApiVersionService.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ internal interface IOpenApiVersionService
1919
/// </summary>
2020
/// <param name="reference">The reference string.</param>
2121
/// <param name="type">The type of the reference.</param>
22+
/// <param name="summary">The summary of the reference.</param>
23+
/// <param name="description">A reference description</param>
2224
/// <returns>The <see cref="OpenApiReference"/> object or null.</returns>
23-
OpenApiReference ConvertToOpenApiReference(string reference, ReferenceType? type);
25+
OpenApiReference ConvertToOpenApiReference(string reference, ReferenceType? type, string summary = null, string description = null);
2426

2527
/// <summary>
2628
/// Loads an OpenAPI Element from a document fragment
@@ -36,5 +38,13 @@ internal interface IOpenApiVersionService
3638
/// <param name="rootNode">RootNode containing the information to be converted into an OpenAPI Document</param>
3739
/// <returns>Instance of OpenApiDocument populated with data from rootNode</returns>
3840
OpenApiDocument LoadDocument(RootNode rootNode);
41+
42+
/// <summary>
43+
/// Gets the description and summary scalar values in a reference object for V3.1 support
44+
/// </summary>
45+
/// <param name="mapNode">A YamlMappingNode.</param>
46+
/// <param name="scalarValue">The scalar value we're parsing.</param>
47+
/// <returns>The resulting node value.</returns>
48+
string GetReferenceScalarValues(MapNode mapNode, string scalarValue);
3949
}
4050
}

src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>netstandard2.0</TargetFrameworks>
4+
<LangVersion>9.0</LangVersion>
45
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
56
<PackageIconUrl>http://go.microsoft.com/fwlink/?LinkID=288890</PackageIconUrl>
67
<PackageProjectUrl>https://github.com/Microsoft/OpenAPI.NET</PackageProjectUrl>

src/Microsoft.OpenApi.Readers/ParseNodes/MapNode.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,13 @@ public override string GetRaw()
181181
return x.Serialize(_node);
182182
}
183183

184-
public T GetReferencedObject<T>(ReferenceType referenceType, string referenceId)
184+
public T GetReferencedObject<T>(ReferenceType referenceType, string referenceId, string summary = null, string description = null)
185185
where T : IOpenApiReferenceable, new()
186186
{
187187
return new T()
188188
{
189189
UnresolvedReference = true,
190-
Reference = Context.VersionService.ConvertToOpenApiReference(referenceId, referenceType)
190+
Reference = Context.VersionService.ConvertToOpenApiReference(referenceId, referenceType, summary, description)
191191
};
192192
}
193193

src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private static ReferenceType GetReferenceTypeV2FromName(string referenceType)
134134
/// <summary>
135135
/// Parse the string to a <see cref="OpenApiReference"/> object.
136136
/// </summary>
137-
public OpenApiReference ConvertToOpenApiReference(string reference, ReferenceType? type)
137+
public OpenApiReference ConvertToOpenApiReference(string reference, ReferenceType? type, string summary = null, string description = null)
138138
{
139139
if (!string.IsNullOrWhiteSpace(reference))
140140
{
@@ -221,5 +221,11 @@ public T LoadElement<T>(ParseNode node) where T : IOpenApiElement
221221
{
222222
return (T)_loaders[typeof(T)](node);
223223
}
224+
225+
/// <inheritdoc />
226+
public string GetReferenceScalarValues(MapNode mapNode, string scalarValue)
227+
{
228+
throw new InvalidOperationException();
229+
}
224230
}
225231
}

src/Microsoft.OpenApi.Readers/V3/OpenApiExampleDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Linq;
45
using Microsoft.OpenApi.Extensions;
56
using Microsoft.OpenApi.Models;
67
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -55,7 +56,10 @@ public static OpenApiExample LoadExample(ParseNode node)
5556
var pointer = mapNode.GetReferencePointer();
5657
if (pointer != null)
5758
{
58-
return mapNode.GetReferencedObject<OpenApiExample>(ReferenceType.Example, pointer);
59+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
60+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
61+
62+
return mapNode.GetReferencedObject<OpenApiExample>(ReferenceType.Example, pointer, summary, description);
5963
}
6064

6165
var example = new OpenApiExample();

src/Microsoft.OpenApi.Readers/V3/OpenApiHeaderDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Linq;
45
using Microsoft.OpenApi.Extensions;
56
using Microsoft.OpenApi.Models;
67
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -89,7 +90,10 @@ public static OpenApiHeader LoadHeader(ParseNode node)
8990
var pointer = mapNode.GetReferencePointer();
9091
if (pointer != null)
9192
{
92-
return mapNode.GetReferencedObject<OpenApiHeader>(ReferenceType.Header, pointer);
93+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
94+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
95+
96+
return mapNode.GetReferencedObject<OpenApiHeader>(ReferenceType.Header, pointer, summary, description);
9397
}
9498

9599
var header = new OpenApiHeader();

src/Microsoft.OpenApi.Readers/V3/OpenApiLinkDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Linq;
45
using Microsoft.OpenApi.Extensions;
56
using Microsoft.OpenApi.Models;
67
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -61,7 +62,10 @@ public static OpenApiLink LoadLink(ParseNode node)
6162
var pointer = mapNode.GetReferencePointer();
6263
if (pointer != null)
6364
{
64-
return mapNode.GetReferencedObject<OpenApiLink>(ReferenceType.Link, pointer);
65+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
66+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
67+
68+
return mapNode.GetReferencedObject<OpenApiLink>(ReferenceType.Link, pointer, summary, description);
6569
}
6670

6771
ParseMap(mapNode, link, _linkFixedFields, _linkPatternFields);

src/Microsoft.OpenApi.Readers/V3/OpenApiParameterDeserializer.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,10 @@ public static OpenApiParameter LoadParameter(ParseNode node)
146146
var pointer = mapNode.GetReferencePointer();
147147
if (pointer != null)
148148
{
149-
return mapNode.GetReferencedObject<OpenApiParameter>(ReferenceType.Parameter, pointer);
149+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
150+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
151+
152+
return mapNode.GetReferencedObject<OpenApiParameter>(ReferenceType.Parameter, pointer, summary, description);
150153
}
151154

152155
var parameter = new OpenApiParameter();

src/Microsoft.OpenApi.Readers/V3/OpenApiPathItemDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Linq;
45
using Microsoft.OpenApi.Extensions;
56
using Microsoft.OpenApi.Models;
67
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -60,10 +61,13 @@ public static OpenApiPathItem LoadPathItem(ParseNode node)
6061

6162
if (pointer != null)
6263
{
64+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
65+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
66+
6367
return new OpenApiPathItem()
6468
{
6569
UnresolvedReference = true,
66-
Reference = node.Context.VersionService.ConvertToOpenApiReference(pointer, ReferenceType.PathItem)
70+
Reference = node.Context.VersionService.ConvertToOpenApiReference(pointer, ReferenceType.PathItem, summary, description)
6771
};
6872
}
6973

src/Microsoft.OpenApi.Readers/V3/OpenApiRequestBodyDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Linq;
45
using Microsoft.OpenApi.Extensions;
56
using Microsoft.OpenApi.Models;
67
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -49,7 +50,10 @@ public static OpenApiRequestBody LoadRequestBody(ParseNode node)
4950
var pointer = mapNode.GetReferencePointer();
5051
if (pointer != null)
5152
{
52-
return mapNode.GetReferencedObject<OpenApiRequestBody>(ReferenceType.RequestBody, pointer);
53+
var description = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Description);
54+
var summary = node.Context.VersionService.GetReferenceScalarValues(mapNode, OpenApiConstants.Summary);
55+
56+
return mapNode.GetReferencedObject<OpenApiRequestBody>(ReferenceType.RequestBody, pointer, summary, description);
5357
}
5458

5559
var requestBody = new OpenApiRequestBody();

0 commit comments

Comments
 (0)