Skip to content

Commit 2bd2ee2

Browse files
Merge pull request #1136 from christianhelle/feat/parameter-extraction-consolidation
Consolidate parameter extraction - Remove IParameterTypeExtractor
2 parents ca24c5a + 4f65ae4 commit 2bd2ee2

11 files changed

Lines changed: 154 additions & 499 deletions

src/Refitter.Core/BodyParameterExtractor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ namespace Refitter.Core;
55

66
internal class BodyParameterExtractor : IParameterTypeExtractor
77
{
8-
public bool CanExtract(OpenApiParameterKind kind) =>
9-
kind == OpenApiParameterKind.Body;
10-
118
public IEnumerable<string> Extract(
129
CSharpOperationModel operationModel,
1310
OpenApiOperation operation,

src/Refitter.Core/FormParameterExtractor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ namespace Refitter.Core;
66

77
internal class FormParameterExtractor : IParameterTypeExtractor
88
{
9-
public bool CanExtract(OpenApiParameterKind kind) =>
10-
kind == OpenApiParameterKind.FormData;
11-
129
public IEnumerable<string> Extract(
1310
CSharpOperationModel operationModel,
1411
OpenApiOperation operation,

src/Refitter.Core/HeaderParameterExtractor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ namespace Refitter.Core;
55

66
internal class HeaderParameterExtractor : IParameterTypeExtractor
77
{
8-
public bool CanExtract(OpenApiParameterKind kind) =>
9-
kind == OpenApiParameterKind.Header;
10-
118
public IEnumerable<string> Extract(
129
CSharpOperationModel operationModel,
1310
OpenApiOperation operation,

src/Refitter.Core/IParameterTypeExtractor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ namespace Refitter.Core;
55

66
internal interface IParameterTypeExtractor
77
{
8-
bool CanExtract(OpenApiParameterKind kind);
98
IEnumerable<string> Extract(
109
CSharpOperationModel operationModel,
1110
OpenApiOperation operation,

src/Refitter.Core/ParameterAggregator.cs

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,10 @@ public IEnumerable<string> ExtractParameters(
3030
allParameters.AddRange(GetExtractor<RouteParameterExtractor>().Extract(operationModel, operation, settings));
3131

3232
// Query parameters (with dynamic querystring support)
33-
var queryParameters = operationModel.Parameters
34-
.Where(p => p.Kind == OpenApiParameterKind.Query)
35-
.ToList();
36-
37-
allParameters.AddRange(ExtractQueryParameters(
38-
operationModel,
39-
settings,
40-
dynamicQuerystringParameterType,
41-
queryParameters,
42-
out dynamicQuerystringParameters));
33+
var queryExtractor = GetExtractor<QueryParameterExtractor>();
34+
queryExtractor.DynamicQuerystringParameterType = dynamicQuerystringParameterType;
35+
allParameters.AddRange(queryExtractor.Extract(operationModel, operation, settings));
36+
dynamicQuerystringParameters = queryExtractor.DynamicQuerystringCode;
4337

4438
// Body parameters (including binary body)
4539
allParameters.AddRange(GetExtractor<BodyParameterExtractor>().Extract(operationModel, operation, settings));
@@ -63,55 +57,17 @@ public IEnumerable<string> ExtractParameters(
6357
return allParameters;
6458
}
6559

66-
private IParameterTypeExtractor GetExtractor<T>() where T : IParameterTypeExtractor
60+
private T GetExtractor<T>() where T : IParameterTypeExtractor
6761
{
6862
return extractors.OfType<T>().First();
6963
}
7064

71-
private static List<string> ExtractQueryParameters(
72-
CSharpOperationModel operationModel,
73-
RefitGeneratorSettings settings,
74-
string dynamicQuerystringParameterType,
75-
List<CSharpParameterModel> queryParameters,
76-
out string? dynamicQuerystringParameters)
77-
{
78-
List<string>? parameters = null;
79-
var dynamicQuerystringParametersCodeBuilder = string.Empty;
80-
81-
if (settings.UseDynamicQuerystringParameters && queryParameters.Count >= 2)
82-
{
83-
var allNullable = queryParameters.All(p =>
84-
ParameterShared.GetQueryParameterType(p, settings).EndsWith("?"));
85-
86-
var dynamicQuerystringCode = DynamicQuerystringParameterBuilder.Build(
87-
queryParameters,
88-
dynamicQuerystringParameterType,
89-
settings);
90-
91-
if (!string.IsNullOrWhiteSpace(dynamicQuerystringCode))
92-
{
93-
dynamicQuerystringParametersCodeBuilder = dynamicQuerystringCode;
94-
}
95-
96-
var dynamicQuerystringParameter = $"[Query] {dynamicQuerystringParameterType}";
97-
if (allNullable)
98-
dynamicQuerystringParameter += "?";
99-
dynamicQuerystringParameter += " queryParams";
100-
parameters = [dynamicQuerystringParameter];
101-
}
102-
103-
dynamicQuerystringParameters = dynamicQuerystringParametersCodeBuilder;
104-
105-
parameters ??= QueryParameterExtractor.ExtractSimple(operationModel, settings).ToList();
106-
107-
return parameters;
108-
}
109-
11065
private static IReadOnlyList<IParameterTypeExtractor> GetDefaultExtractors()
11166
{
11267
return new IParameterTypeExtractor[]
11368
{
11469
new RouteParameterExtractor(),
70+
new QueryParameterExtractor(),
11571
new BodyParameterExtractor(),
11672
new HeaderParameterExtractor(),
11773
new FormParameterExtractor(),

src/Refitter.Core/ParameterExtractor.cs

Lines changed: 0 additions & 153 deletions
This file was deleted.

src/Refitter.Core/QueryParameterExtractor.cs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,56 @@
33

44
namespace Refitter.Core;
55

6-
internal static class QueryParameterExtractor
6+
internal class QueryParameterExtractor : IParameterTypeExtractor
77
{
8-
public static IEnumerable<string> ExtractSimple(
8+
public string? DynamicQuerystringParameterType { get; set; }
9+
public string? DynamicQuerystringCode { get; private set; }
10+
11+
public IEnumerable<string> Extract(
912
CSharpOperationModel operationModel,
13+
OpenApiOperation operation,
1014
RefitGeneratorSettings settings)
1115
{
12-
return operationModel.Parameters
16+
var queryParameters = operationModel.Parameters
1317
.Where(p => p.Kind == OpenApiParameterKind.Query)
18+
.ToList();
19+
20+
if (settings.UseDynamicQuerystringParameters && queryParameters.Count >= 2)
21+
return ExtractDynamic(queryParameters, settings);
22+
23+
return ExtractSimple(queryParameters, settings);
24+
}
25+
26+
private List<string> ExtractDynamic(
27+
List<CSharpParameterModel> queryParameters,
28+
RefitGeneratorSettings settings)
29+
{
30+
var dynamicQuerystringCode = DynamicQuerystringParameterBuilder.Build(
31+
queryParameters,
32+
DynamicQuerystringParameterType!,
33+
settings);
34+
35+
DynamicQuerystringCode = !string.IsNullOrWhiteSpace(dynamicQuerystringCode)
36+
? dynamicQuerystringCode
37+
: null;
38+
39+
var allNullable = queryParameters.All(p =>
40+
ParameterShared.GetQueryParameterType(p, settings).EndsWith("?"));
41+
42+
var dynamicQuerystringParameter = $"[Query] {DynamicQuerystringParameterType}";
43+
if (allNullable)
44+
dynamicQuerystringParameter += "?";
45+
dynamicQuerystringParameter += " queryParams";
46+
return [dynamicQuerystringParameter];
47+
}
48+
49+
private List<string> ExtractSimple(
50+
List<CSharpParameterModel> queryParameters,
51+
RefitGeneratorSettings settings)
52+
{
53+
DynamicQuerystringCode = string.Empty;
54+
55+
return queryParameters
1456
.Select(p =>
1557
{
1658
var variableName = ParameterShared.GetVariableName(p);

src/Refitter.Core/RouteParameterExtractor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ namespace Refitter.Core;
55

66
internal class RouteParameterExtractor : IParameterTypeExtractor
77
{
8-
public bool CanExtract(OpenApiParameterKind kind) =>
9-
kind == OpenApiParameterKind.Path;
10-
118
public IEnumerable<string> Extract(
129
CSharpOperationModel operationModel,
1310
OpenApiOperation operation,

src/Refitter.Tests/FormParameterExtractorTests.cs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,6 @@ namespace Refitter.Tests;
1010

1111
public class FormParameterExtractorTests
1212
{
13-
[Test]
14-
public void CanExtract_Returns_True_For_FormData()
15-
{
16-
var extractor = new FormParameterExtractor();
17-
extractor.CanExtract(OpenApiParameterKind.FormData).Should().BeTrue();
18-
}
19-
20-
[Test]
21-
public void CanExtract_Returns_False_For_Non_FormData()
22-
{
23-
var extractor = new FormParameterExtractor();
24-
extractor.CanExtract(OpenApiParameterKind.Query).Should().BeFalse();
25-
extractor.CanExtract(OpenApiParameterKind.Path).Should().BeFalse();
26-
extractor.CanExtract(OpenApiParameterKind.Header).Should().BeFalse();
27-
extractor.CanExtract(OpenApiParameterKind.Body).Should().BeFalse();
28-
}
29-
3013
[Test]
3114
public void Extract_Returns_Empty_When_No_FormData_Parameters()
3215
{

0 commit comments

Comments
 (0)