Skip to content

Commit 7eb8d6b

Browse files
committed
Resolve PR comments
1 parent f9a529b commit 7eb8d6b

File tree

8 files changed

+23
-37
lines changed

8 files changed

+23
-37
lines changed

src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs

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

4-
using System;
54
using System.Collections.Generic;
65
using Microsoft.OpenApi.Interfaces;
76
using Microsoft.OpenApi.Models.References;
@@ -50,8 +49,7 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator)
5049
/// <param name="writer"></param>
5150
public void SerializeAsV31(IOpenApiWriter writer)
5251
{
53-
SerializeInternal(writer,
54-
(writer, referenceElement) => referenceElement.SerializeAsV31(writer));
52+
SerializeInternal(writer);
5553

5654
// extensions
5755
writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_1);
@@ -64,16 +62,16 @@ public void SerializeAsV31(IOpenApiWriter writer)
6462
/// </summary>
6563
public void SerializeAsV3(IOpenApiWriter writer)
6664
{
67-
SerializeInternal(writer,
68-
(writer, referenceElement) => referenceElement.SerializeAsV3(writer));
65+
SerializeInternal(writer);
6966

7067
writer.WriteEndObject();
7168
}
7269

7370
/// <summary>
7471
/// Serialize <see cref="OpenApiDiscriminator"/> to Open Api v3.0
7572
/// </summary>
76-
private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOpenApiReferenceHolder> action)
73+
/// <param name="writer"></param>
74+
private void SerializeInternal(IOpenApiWriter writer)
7775
{
7876
Utils.CheckArgumentNull(writer);
7977

@@ -83,7 +81,13 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
8381
writer.WriteProperty(OpenApiConstants.PropertyName, PropertyName);
8482

8583
// mapping
86-
writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, key, reference) => action(w, reference));
84+
writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, s) =>
85+
{
86+
if (!string.IsNullOrEmpty(s.Reference.ReferenceV3) && s.Reference.ReferenceV3 is not null)
87+
{
88+
w.WriteValue(s.Reference.ReferenceV3);
89+
}
90+
});
8791
}
8892

8993
/// <summary>

src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs

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

4-
using System.Collections.Generic;
4+
using System;
55
using System.Linq;
66
using Microsoft.OpenApi.Models;
77
using Microsoft.OpenApi.Models.References;
@@ -24,7 +24,7 @@ internal static partial class OpenApiV3Deserializer
2424
},
2525
{
2626
"mapping",
27-
(o, n, doc) => o.Mapping = n.CreateMap(LoadMapping, doc)
27+
(o, n, doc) => o.Mapping = n.CreateSimpleMap((node) => LoadMapping(node, doc))
2828
}
2929
};
3030

@@ -44,10 +44,8 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu
4444
}
4545
public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument)
4646
{
47-
var mapNode = node.CheckMapNode("mapping");
48-
49-
var pointer = mapNode.GetReferencePointer();
50-
var reference = GetReferenceIdAndExternalResource(pointer!);
47+
var pointer = node.GetScalarValue() ?? throw new InvalidOperationException("Could not get a pointer reference");
48+
var reference = GetReferenceIdAndExternalResource(pointer);
5149
return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2);
5250
}
5351
}

src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using Microsoft.OpenApi.Any;
8-
using Microsoft.OpenApi.Exceptions;
9-
using Microsoft.OpenApi.Extensions;
108
using Microsoft.OpenApi.Interfaces;
119
using Microsoft.OpenApi.Models;
1210
using Microsoft.OpenApi.Models.References;
13-
using Microsoft.OpenApi.Properties;
1411
using Microsoft.OpenApi.Reader.ParseNodes;
1512

1613
namespace Microsoft.OpenApi.Reader.V3

src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Linq;
43
using Microsoft.OpenApi.Extensions;
54
using Microsoft.OpenApi.Models;
@@ -26,7 +25,7 @@ internal static partial class OpenApiV31Deserializer
2625
{
2726
"mapping", (o, n, doc) =>
2827
{
29-
o.Mapping = n.CreateMap(LoadMapping, doc);
28+
o.Mapping = n.CreateSimpleMap((node) => LoadMapping(node, doc));
3029
}
3130
}
3231
};
@@ -52,10 +51,8 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu
5251

5352
public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument)
5453
{
55-
var mapNode = node.CheckMapNode("mapping");
56-
57-
var pointer = mapNode.GetReferencePointer();
58-
var reference = GetReferenceIdAndExternalResource(pointer!);
54+
var pointer = node.GetScalarValue() ?? throw new InvalidOperationException("Could not get a pointer reference");
55+
var reference = GetReferenceIdAndExternalResource(pointer);
5956
return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2);
6057
}
6158
}

src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using Microsoft.OpenApi.Any;
8-
using Microsoft.OpenApi.Exceptions;
9-
using Microsoft.OpenApi.Extensions;
108
using Microsoft.OpenApi.Interfaces;
119
using Microsoft.OpenApi.Models;
1210
using Microsoft.OpenApi.Models.References;
13-
using Microsoft.OpenApi.Properties;
1411
using Microsoft.OpenApi.Reader.ParseNodes;
1512
using Microsoft.OpenApi.Reader.V3;
1613

test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,8 @@ components: # Reusable components for the API
7575
discriminator: # The discriminator for resolving the concrete schema type
7676
propertyName: petType
7777
mapping:
78-
cat:
79-
$ref: '#/components/schemas/Cat'
80-
dog:
81-
$ref: '#/components/schemas/Dog'
78+
cat: '#/components/schemas/Cat'
79+
dog: '#/components/schemas/Dog'
8280
Cat: # A schema for a cat object
8381
allOf:
8482
- $ref: '#/components/schemas/Pet'

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
// Licensed under the MIT license.
33

44
using System;
5-
using System.Diagnostics;
65
using System.IO;
76
using System.Threading.Tasks;
87
using Microsoft.OpenApi.Models;
98
using Microsoft.OpenApi.Models.References;
109
using Microsoft.OpenApi.Reader;
11-
using Microsoft.VisualStudio.TestPlatform.Utilities;
12-
using Newtonsoft.Json;
1310
using Xunit;
1411

1512
namespace Microsoft.OpenApi.Readers.Tests.V3Tests
@@ -41,7 +38,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed()
4138
Mapping =
4239
{
4340
["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument),
44-
["kitten"] = new OpenApiSchemaReference("Cat", openApiDocument)
41+
["monster"] = new OpenApiSchemaReference("schema.json" , openApiDocument, "https://gigantic-server.com/schemas/Monster/schema.json")
4542
}
4643
}, discriminator);
4744
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
propertyName: pet_type
22
mapping:
3-
puppy:
4-
$ref: '#/components/schemas/Dog'
5-
kitten:
6-
$ref: '#/components/schemas/Cat'
3+
puppy: '#/components/schemas/Dog'
4+
monster: https://gigantic-server.com/schemas/Monster/schema.json

0 commit comments

Comments
 (0)