Skip to content

Commit cd13300

Browse files
committed
update: Fix #18
Add aliases for "x-enumNames" and "x-enumDescriptions"
1 parent 5286e87 commit cd13300

File tree

14 files changed

+121
-71
lines changed

14 files changed

+121
-71
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
These are the changes to each version that has been released on the [nuget](https://www.nuget.org/packages/Unchase.Swashbuckle.AspNetCore.Extensions/).
1010

11+
## v2.6.11 `2021-09-29`
12+
13+
- [x] Fix [#18](https://github.com/unchase/Unchase.Swashbuckle.AspNetCore.Extensions/issues/18): add aliases for "x-enumNames" and "x-enumDescriptions"
14+
1115
## v2.6.9 `2021-08-30`
1216

1317
- [x] Fix NRE in `InheritDocRequestBodyFilter` and `InheritDocParameterFilter`

README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,22 @@ public void ConfigureServices(IServiceCollection services)
125125
// or configured:
126126
options.AddEnumsWithValuesFixFilters(services, o =>
127127
{
128-
// add schema filter to fix enums (add 'x-enumNames' for NSwag) in schema
128+
// add schema filter to fix enums (add 'x-enumNames' for NSwag or its alias from XEnumNamesAlias) in schema
129129
o.ApplySchemaFilter = true;
130130

131-
// add parameter filter to fix enums (add 'x-enumNames' for NSwag) in schema parameters
131+
// alias for replacing 'x-enumNames' in swagger document
132+
o.XEnumNamesAlias = "x-enum-varnames";
133+
134+
// alias for replacing 'x-enumDescriptions' in swagger document
135+
o.XEnumDescriptionsAlias = "x-enum-descriptions";
136+
137+
// add parameter filter to fix enums (add 'x-enumNames' for NSwag or its alias from XEnumNamesAlias) in schema parameters
132138
o.ApplyParameterFilter = true;
133139

134140
// add document filter to fix enums displaying in swagger document
135141
o.ApplyDocumentFilter = true;
136142

137-
// add descriptions from DescriptionAttribute or xml-comments to fix enums (add 'x-enumDescriptions' for schema extensions) for applied filters
143+
// add descriptions from DescriptionAttribute or xml-comments to fix enums (add 'x-enumDescriptions' or its alias from XEnumDescriptionsAlias for schema extensions) for applied filters
138144
o.IncludeDescriptions = true;
139145

140146
// add remarks for descriptions from xml-comments

src/Unchase.Swashbuckle.AspNetCore.Extensions/Extensions/EnumTypeExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,12 @@ private static string QualifiedNameFor(Type type, bool expandGenericArgs = false
158158
return stringBuilder.ToString();
159159
}
160160

161-
internal static string AddEnumValuesDescription(this OpenApiSchema schema, bool includeDescriptionFromAttribute = false)
161+
internal static string AddEnumValuesDescription(this OpenApiSchema schema, string xEnumNamesAlias, string xEnumDescriptionsAlias, bool includeDescriptionFromAttribute = false)
162162
{
163163
if (schema.Enum == null || schema.Enum.Count == 0)
164164
return null;
165165

166-
if (!schema.Extensions.ContainsKey("x-enumNames") || ((OpenApiArray)schema.Extensions["x-enumNames"]).Count != schema.Enum.Count)
166+
if (!schema.Extensions.ContainsKey(xEnumNamesAlias) || ((OpenApiArray)schema.Extensions[xEnumNamesAlias]).Count != schema.Enum.Count)
167167
return null;
168168

169169
var sb = new StringBuilder();
@@ -172,7 +172,7 @@ internal static string AddEnumValuesDescription(this OpenApiSchema schema, bool
172172
if (schema.Enum[i] is OpenApiInteger schemaEnumInt)
173173
{
174174
var value = schemaEnumInt.Value;
175-
var name = ((OpenApiString)((OpenApiArray)schema.Extensions["x-enumNames"])[i]).Value;
175+
var name = ((OpenApiString)((OpenApiArray)schema.Extensions[xEnumNamesAlias])[i]).Value;
176176
sb.Append($"{Environment.NewLine}{Environment.NewLine}{value} = {name}");
177177
}
178178
else if (schema.Enum[i] is OpenApiString schemaEnumString)
@@ -184,13 +184,13 @@ internal static string AddEnumValuesDescription(this OpenApiSchema schema, bool
184184
// add description from DescriptionAttribute
185185
if (includeDescriptionFromAttribute)
186186
{
187-
if (!schema.Extensions.ContainsKey("x-enumDescriptions"))
187+
if (!schema.Extensions.ContainsKey(xEnumDescriptionsAlias))
188188
continue;
189189

190-
var xEnumDescriptions = (OpenApiArray)schema.Extensions["x-enumDescriptions"];
190+
var xEnumDescriptions = (OpenApiArray)schema.Extensions[xEnumDescriptionsAlias];
191191
if (xEnumDescriptions?.Count == schema.Enum.Count)
192192
{
193-
var description = ((OpenApiString)((OpenApiArray)schema.Extensions["x-enumDescriptions"])[i]).Value;
193+
var description = ((OpenApiString)((OpenApiArray)schema.Extensions[xEnumDescriptionsAlias])[i]).Value;
194194
if (!string.IsNullOrWhiteSpace(description))
195195
sb.Append($" ({description})");
196196
}

src/Unchase.Swashbuckle.AspNetCore.Extensions/Filters/DisplayEnumsWithValuesDocumentFilter.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ internal class DisplayEnumsWithValuesDocumentFilter : IDocumentFilter
1414

1515
private readonly bool _applyFiler;
1616
private readonly bool _includeDescriptionFromAttribute;
17+
private readonly string _xEnumNamesAlias;
18+
private readonly string _xEnumDescriptionsAlias;
1719

1820
#endregion
1921

@@ -29,8 +31,10 @@ public DisplayEnumsWithValuesDocumentFilter(IOptions<FixEnumsOptions> options, A
2931
if (options.Value != null)
3032
{
3133
configureOptions?.Invoke(options.Value);
32-
this._includeDescriptionFromAttribute = options.Value.IncludeDescriptions;
33-
this._applyFiler = options.Value.ApplyDocumentFilter;
34+
_includeDescriptionFromAttribute = options.Value.IncludeDescriptions;
35+
_applyFiler = options.Value.ApplyDocumentFilter;
36+
_xEnumNamesAlias = options.Value.XEnumNamesAlias;
37+
_xEnumDescriptionsAlias = options.Value.XEnumDescriptionsAlias;
3438
}
3539
}
3640

@@ -45,13 +49,13 @@ public DisplayEnumsWithValuesDocumentFilter(IOptions<FixEnumsOptions> options, A
4549
/// <param name="context"><see cref="DocumentFilterContext"/>.</param>
4650
public void Apply(OpenApiDocument openApiDoc, DocumentFilterContext context)
4751
{
48-
if (!this._applyFiler)
52+
if (!_applyFiler)
4953
return;
5054

5155
foreach (var schemaDictionaryItem in openApiDoc.Components.Schemas)
5256
{
5357
var schema = schemaDictionaryItem.Value;
54-
var description = schema.AddEnumValuesDescription(this._includeDescriptionFromAttribute);
58+
var description = schema.AddEnumValuesDescription(_xEnumNamesAlias, _xEnumDescriptionsAlias, _includeDescriptionFromAttribute);
5559
if (description != null)
5660
{
5761
if (schema.Description == null)
@@ -94,7 +98,7 @@ public void Apply(OpenApiDocument openApiDoc, DocumentFilterContext context)
9498

9599
if (schema != null)
96100
{
97-
var description = schema.AddEnumValuesDescription(this._includeDescriptionFromAttribute);
101+
var description = schema.AddEnumValuesDescription(_xEnumNamesAlias, _xEnumDescriptionsAlias, _includeDescriptionFromAttribute);
98102
if (description != null)
99103
{
100104
if (parameter.Description == null)

src/Unchase.Swashbuckle.AspNetCore.Extensions/Filters/XEnumNamesParameterFilter.cs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ internal class XEnumNamesParameterFilter : IParameterFilter
1818

1919
private readonly bool _includeXEnumDescriptions;
2020
private readonly bool _includeXEnumRemarks;
21+
private readonly string _xEnumNamesAlias;
22+
private readonly string _xEnumDescriptionsAlias;
2123
private readonly DescriptionSources _descriptionSources;
2224
private readonly bool _applyFiler;
2325
private readonly HashSet<XPathNavigator> _xmlNavigators = new HashSet<XPathNavigator>();
@@ -36,15 +38,17 @@ public XEnumNamesParameterFilter(IOptions<FixEnumsOptions> options, Action<FixEn
3638
if (options.Value != null)
3739
{
3840
configureOptions?.Invoke(options.Value);
39-
this._includeXEnumDescriptions = options.Value?.IncludeDescriptions ?? false;
40-
this._includeXEnumRemarks = options.Value?.IncludeXEnumRemarks ?? false;
41-
this._descriptionSources = options.Value?.DescriptionSource ?? DescriptionSources.DescriptionAttributes;
42-
this._applyFiler = options.Value?.ApplyParameterFilter ?? false;
41+
_includeXEnumDescriptions = options.Value?.IncludeDescriptions ?? false;
42+
_includeXEnumRemarks = options.Value?.IncludeXEnumRemarks ?? false;
43+
_descriptionSources = options.Value.DescriptionSource;
44+
_applyFiler = options.Value?.ApplyParameterFilter ?? false;
45+
_xEnumNamesAlias = options.Value?.XEnumNamesAlias;
46+
_xEnumDescriptionsAlias = options.Value?.XEnumDescriptionsAlias;
4347
foreach (var filePath in options.Value?.IncludedXmlCommentsPaths)
4448
{
4549
if (File.Exists(filePath))
4650
{
47-
this._xmlNavigators.Add(new XPathDocument(filePath).CreateNavigator());
51+
_xmlNavigators.Add(new XPathDocument(filePath).CreateNavigator());
4852
}
4953
}
5054
}
@@ -61,7 +65,7 @@ public XEnumNamesParameterFilter(IOptions<FixEnumsOptions> options, Action<FixEn
6165
/// <param name="context"><see cref="ParameterFilterContext"/>.</param>
6266
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
6367
{
64-
if (!this._applyFiler)
68+
if (!_applyFiler)
6569
return;
6670

6771
var typeInfo = context.ParameterInfo?.ParameterType ?? context.PropertyInfo?.PropertyType;
@@ -74,39 +78,39 @@ public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
7478
{
7579
var names = Enum.GetNames(typeInfo).Select(name => new OpenApiString(name));
7680
enumsArray.AddRange(names);
77-
if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
81+
if (!parameter.Extensions.ContainsKey(_xEnumNamesAlias) && enumsArray.Any())
7882
{
79-
parameter.Extensions.Add("x-enumNames", enumsArray);
83+
parameter.Extensions.Add(_xEnumNamesAlias, enumsArray);
8084
}
8185

82-
if (this._includeXEnumDescriptions)
86+
if (_includeXEnumDescriptions)
8387
{
84-
enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(typeInfo, this._descriptionSources, this._xmlNavigators, this._includeXEnumRemarks));
85-
if (!parameter.Extensions.ContainsKey("x-enumDescriptions") && enumsDescriptionsArray.Any())
88+
enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(typeInfo, _descriptionSources, _xmlNavigators, _includeXEnumRemarks));
89+
if (!parameter.Extensions.ContainsKey(_xEnumDescriptionsAlias) && enumsDescriptionsArray.Any())
8690
{
87-
parameter.Extensions.Add("x-enumDescriptions", enumsDescriptionsArray);
91+
parameter.Extensions.Add(_xEnumDescriptionsAlias, enumsDescriptionsArray);
8892
}
8993
}
9094
}
91-
else if (typeInfo.IsGenericType && !parameter.Extensions.ContainsKey("x-enumNames"))
95+
else if (typeInfo.IsGenericType && !parameter.Extensions.ContainsKey(_xEnumNamesAlias))
9296
{
9397
foreach (var genericArgumentType in typeInfo.GetGenericArguments())
9498
{
9599
if (genericArgumentType.IsEnum)
96100
{
97101
var names = Enum.GetNames(genericArgumentType).Select(name => new OpenApiString(name));
98102
enumsArray.AddRange(names);
99-
if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
103+
if (!parameter.Extensions.ContainsKey(_xEnumNamesAlias) && enumsArray.Any())
100104
{
101-
parameter.Extensions.Add("x-enumNames", enumsArray);
105+
parameter.Extensions.Add(_xEnumNamesAlias, enumsArray);
102106
}
103107

104-
if (this._includeXEnumDescriptions)
108+
if (_includeXEnumDescriptions)
105109
{
106-
enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(genericArgumentType, this._descriptionSources, this._xmlNavigators, this._includeXEnumRemarks));
107-
if (!parameter.Extensions.ContainsKey("x-enumDescriptions") && enumsDescriptionsArray.Any())
110+
enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(genericArgumentType, _descriptionSources, _xmlNavigators, _includeXEnumRemarks));
111+
if (!parameter.Extensions.ContainsKey(_xEnumDescriptionsAlias) && enumsDescriptionsArray.Any())
108112
{
109-
parameter.Extensions.Add("x-enumDescriptions", enumsDescriptionsArray);
113+
parameter.Extensions.Add(_xEnumDescriptionsAlias, enumsDescriptionsArray);
110114
}
111115
}
112116
}

0 commit comments

Comments
 (0)