Skip to content

Commit faa8df1

Browse files
committed
- fixes a bug where quotes were added to boool/number parameters
Signed-off-by: Vincent Biret <[email protected]>
1 parent f31925b commit faa8df1

File tree

5 files changed

+45
-5
lines changed

5 files changed

+45
-5
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using Microsoft.OData.Edm;
7+
8+
namespace Microsoft.OpenApi.OData.Edm
9+
{
10+
/// <summary>
11+
/// Extension methods for <see cref="IEdmType"/>
12+
/// </summary>
13+
public static class EdmTypeExtensions
14+
{
15+
/// <summary>
16+
/// Determines wether a path parameter should be wrapped in quotes based on the type of the parameter.
17+
/// </summary>
18+
/// <param name="edmType">The type of the parameter.</param>
19+
public static bool ShouldPathParameterBeQuoted(this IEdmType edmType)
20+
{
21+
if (edmType == null)
22+
{
23+
return false;
24+
}
25+
26+
return edmType.TypeKind switch
27+
{
28+
EdmTypeKind.Enum => true,
29+
EdmTypeKind.Primitive when edmType.IsString() || edmType.IsTemporal() => true,
30+
_ => false,
31+
};
32+
}
33+
}
34+
35+
}

src/Microsoft.OpenApi.OData.Reader/Edm/ODataKeySegment.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ public override string GetPathItemName(OpenApiConvertSettings settings, HashSet<
103103
foreach (var keyProperty in keys)
104104
{
105105
string name = Utils.GetUniqueName(keyProperty.Name, parameters);
106-
keyStrings.Add(keyProperty.Name + "='{" + name + "}'");
106+
var quote = keyProperty.Type.Definition.ShouldPathParameterBeQuoted() ? "'" : string.Empty;
107+
keyStrings.Add($"{keyProperty.Name}={quote}{{{name}}}{quote}");
107108
}
108109

109110
return String.Join(",", keyStrings);

src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationImportSegment.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ private string FunctionImportName(IEdmFunctionImport functionImport, OpenApiConv
8383
}
8484
else
8585
{
86-
return p.Name + "='{" + uniqueName + "}'";
86+
var quote = p.Type.Definition.ShouldPathParameterBeQuoted() ? "'" : string.Empty;
87+
return $"{p.Name}={quote}{{{uniqueName}}}{quote}";
8788
}
8889
})));
8990

src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationSegment.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ private string FunctionName(IEdmFunction function, OpenApiConvertSettings settin
148148
}
149149
else
150150
{
151-
return p.Name + "='{" + uniqueName + "}'";
151+
var quote = p.Type.Definition.ShouldPathParameterBeQuoted() ? "'" : string.Empty;
152+
return p.Name + $"={quote}{{{uniqueName}}}{quote}";
152153
}
153154
})));
154155

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiParameterGenerator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ public static IList<OpenApiParameter> CreateParameters(this ODataContext context
136136

137137
if (parameterNameMapping != null)
138138
{
139-
parameter.Description = $"Usage: {edmParameter.Name}='{{{parameterNameMapping[edmParameter.Name]}}}'";
139+
var quote = edmParameter.Type.Definition.ShouldPathParameterBeQuoted() ? "'" : string.Empty;
140+
parameter.Description = $"Usage: {edmParameter.Name}={quote}{{{parameterNameMapping[edmParameter.Name]}}}{quote}";
140141
}
141142

142143
parameters.Add(parameter);
@@ -203,7 +204,8 @@ public static IList<OpenApiParameter> CreateKeyParameters(this ODataContext cont
203204

204205
if (keySegment.KeyMappings != null)
205206
{
206-
parameter.Description += $", {keyProperty.Name}='{{{parameter.Name}}}'";
207+
var quote = keyProperty.Type.Definition.ShouldPathParameterBeQuoted() ? "'" : string.Empty;
208+
parameter.Description += $", {keyProperty.Name}={quote}{{{parameter.Name}}}{quote}";
207209
}
208210

209211
parameter.Extensions.Add(Constants.xMsKeyType, new OpenApiString(entityType.Name));

0 commit comments

Comments
 (0)