diff --git a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiEdmTypeSchemaGenerator.cs b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiEdmTypeSchemaGenerator.cs index 24ab0d00..510f07a8 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiEdmTypeSchemaGenerator.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiEdmTypeSchemaGenerator.cs @@ -195,8 +195,8 @@ public static OpenApiSchema CreateSchema(this ODataContext context, IEdmPrimitiv case EdmPrimitiveTypeKind.Double: // double schema.OneOf = new List { - new OpenApiSchema { Type = Constants.NumberType, Format = "double" }, - new OpenApiSchema { Type = Constants.StringType }, + new OpenApiSchema { Type = Constants.NumberType, Format = "double", Nullable = true }, + new OpenApiSchema { Type = Constants.StringType, Nullable = true }, new OpenApiSchema { UnresolvedReference = true, diff --git a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs index 5ea40c72..2834322e 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs @@ -121,12 +121,14 @@ public static IDictionary CreateSchemas(this ODataContext schemas[Constants.ReferenceNumericName] = new() { - Enum = new List - { + Type = Constants.StringType, + Nullable = true, + Enum = + [ new OpenApiString("-INF"), new OpenApiString("INF"), new OpenApiString("NaN") - } + ] }; if (context.Settings.EnableODataAnnotationReferencesForResponses) diff --git a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj index e613b535..0ac7f984 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj +++ b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj @@ -15,7 +15,7 @@ net8.0 Microsoft.OpenApi.OData true - 2.0.0-preview.2 + 2.0.0-preview.3 This package contains the codes you need to convert OData CSDL to Open API Document of Model. © Microsoft Corporation. All rights reserved. Microsoft OpenApi OData EDM @@ -25,6 +25,7 @@ - Cleaned up obsolete APIs - Changed target framework to net8.0 - Adds support for retrieving collection of enum values from UpdateMethod property of UpdateRestrictions annotation #564 + - Adds nullable to double schema conversions #581 Microsoft.OpenApi.OData.Reader ..\..\tool\Microsoft.OpenApi.OData.snk diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs index 32b39812..712b38c2 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs @@ -1105,10 +1105,12 @@ public void NonNullableDoublePropertyWithDefaultStringWorks() ""oneOf"": [ { ""type"": ""number"", - ""format"": ""double"" + ""format"": ""double"", + ""nullable"": true }, { - ""type"": ""string"" + ""type"": ""string"", + ""nullable"": true }, { ""$ref"": ""#/components/schemas/ReferenceNumeric"" diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.json index 5be9fd5a..21757967 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.json @@ -1152,7 +1152,8 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string" } }, "parameters": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.yaml index efedb95e..de844155 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.V2.yaml @@ -757,6 +757,7 @@ definitions: - '-INF' - INF - NaN + type: string parameters: top: in: query diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.json index c2e137ea..ba0bc142 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.json @@ -1258,7 +1258,9 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string", + "nullable": true } }, "responses": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.yaml index 81208bcf..fca66953 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Basic.OpenApi.yaml @@ -829,6 +829,8 @@ components: - '-INF' - INF - NaN + type: string + nullable: true responses: error: description: error diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.json index 972656d0..3b1a6c86 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.json @@ -103,7 +103,8 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string" } }, "parameters": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.yaml index 1f101507..a75539a5 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.V2.yaml @@ -71,6 +71,7 @@ definitions: - '-INF' - INF - NaN + type: string parameters: top: in: query diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.json index 6ed11956..aa6c7174 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.json @@ -108,7 +108,9 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string", + "nullable": true } }, "responses": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.yaml index 9d790631..d8bc14ae 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Empty.OpenApi.yaml @@ -74,6 +74,8 @@ components: - '-INF' - INF - NaN + type: string + nullable: true responses: error: description: error diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.json index 7bcc154c..10e4853a 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.json @@ -6118,7 +6118,8 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string" } }, "parameters": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.yaml index e69a85f5..2f7e0c2c 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.V2.yaml @@ -4436,6 +4436,7 @@ definitions: - '-INF' - INF - NaN + type: string parameters: top: in: query diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.json index bb39c082..fb7abaef 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.json @@ -6835,7 +6835,9 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string", + "nullable": true } }, "responses": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.yaml index aa66b9c7..9b580a01 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/Multiple.Schema.OpenApi.yaml @@ -4921,6 +4921,8 @@ components: - '-INF' - INF - NaN + type: string + nullable: true responses: error: description: error diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json index 3e3f587b..f26cdbed 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json @@ -31561,7 +31561,8 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string" } }, "parameters": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml index 89ee6536..b960188e 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml @@ -21393,6 +21393,7 @@ definitions: - '-INF' - INF - NaN + type: string parameters: top: in: query diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json index 7f4abd96..4ec8abe8 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json @@ -1397,10 +1397,12 @@ "oneOf": [ { "type": "number", - "format": "double" + "format": "double", + "nullable": true }, { - "type": "string" + "type": "string", + "nullable": true }, { "$ref": "#/components/schemas/ReferenceNumeric" @@ -1416,10 +1418,12 @@ "oneOf": [ { "type": "number", - "format": "double" + "format": "double", + "nullable": true }, { - "type": "string" + "type": "string", + "nullable": true }, { "$ref": "#/components/schemas/ReferenceNumeric" @@ -35293,7 +35297,9 @@ "-INF", "INF", "NaN" - ] + ], + "type": "string", + "nullable": true } }, "responses": { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml index 366f65b5..0469102c 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml @@ -914,7 +914,9 @@ paths: oneOf: - type: number format: double + nullable: true - type: string + nullable: true - $ref: '#/components/schemas/ReferenceNumeric' - name: lon in: path @@ -923,7 +925,9 @@ paths: oneOf: - type: number format: double + nullable: true - type: string + nullable: true - $ref: '#/components/schemas/ReferenceNumeric' responses: '200': @@ -23713,6 +23717,8 @@ components: - '-INF' - INF - NaN + type: string + nullable: true responses: error: description: error