@@ -21,16 +21,27 @@ public class TransformersBenchmark : OpenApiDocumentServiceTestBase
21
21
public int TransformerCount { get ; set ; }
22
22
23
23
private readonly IEndpointRouteBuilder _builder = CreateBuilder ( ) ;
24
- private readonly OpenApiOptions _options = new OpenApiOptions ( ) ;
24
+ private readonly OpenApiOptions _options = new ( ) ;
25
25
private OpenApiDocumentService _documentService ;
26
26
27
+ [ GlobalSetup ( Target = nameof ( ActivatedOperationTransformer ) ) ]
28
+ public void ActivatedOperationTransformer_Setup ( )
29
+ {
30
+ _builder . MapGet ( "/" , ( ) => { } ) ;
31
+ for ( var i = 0 ; i <= TransformerCount ; i ++ )
32
+ {
33
+ _options . AddOperationTransformer < OperationTransformer > ( ) ;
34
+ }
35
+ _documentService = CreateDocumentService ( _builder , _options ) ;
36
+ }
37
+
27
38
[ GlobalSetup ( Target = nameof ( OperationTransformerAsDelegate ) ) ]
28
39
public void OperationTransformerAsDelegate_Setup ( )
29
40
{
30
41
_builder . MapGet ( "/" , ( ) => { } ) ;
31
42
for ( var i = 0 ; i <= TransformerCount ; i ++ )
32
43
{
33
- _options . UseOperationTransformer ( ( operation , context , token ) =>
44
+ _options . AddOperationTransformer ( ( operation , context , token ) =>
34
45
{
35
46
operation . Description = "New Description" ;
36
47
return Task . CompletedTask ;
@@ -45,7 +56,7 @@ public void ActivatedDocumentTransformer_Setup()
45
56
_builder . MapGet ( "/" , ( ) => { } ) ;
46
57
for ( var i = 0 ; i <= TransformerCount ; i ++ )
47
58
{
48
- _options . UseTransformer < ActivatedTransformer > ( ) ;
59
+ _options . AddDocumentTransformer < DocumentTransformer > ( ) ;
49
60
}
50
61
_documentService = CreateDocumentService ( _builder , _options ) ;
51
62
}
@@ -56,7 +67,7 @@ public void DocumentTransformerAsDelegate_Delegate()
56
67
_builder . MapGet ( "/" , ( ) => { } ) ;
57
68
for ( var i = 0 ; i <= TransformerCount ; i ++ )
58
69
{
59
- _options . UseTransformer ( ( document , context , token ) =>
70
+ _options . AddDocumentTransformer ( ( document , context , token ) =>
60
71
{
61
72
document . Info . Description = "New Description" ;
62
73
return Task . CompletedTask ;
@@ -65,13 +76,24 @@ public void DocumentTransformerAsDelegate_Delegate()
65
76
_documentService = CreateDocumentService ( _builder , _options ) ;
66
77
}
67
78
68
- [ GlobalSetup ( Target = nameof ( SchemaTransformer ) ) ]
79
+ [ GlobalSetup ( Target = nameof ( ActivatedSchemaTransformer ) ) ]
80
+ public void ActivatedSchemaTransformer_Setup ( )
81
+ {
82
+ _builder . MapGet ( "/" , ( ) => { } ) ;
83
+ for ( var i = 0 ; i <= TransformerCount ; i ++ )
84
+ {
85
+ _options . AddSchemaTransformer < SchemaTransformer > ( ) ;
86
+ }
87
+ _documentService = CreateDocumentService ( _builder , _options ) ;
88
+ }
89
+
90
+ [ GlobalSetup ( Target = nameof ( SchemaTransformerAsDelegate ) ) ]
69
91
public void SchemaTransformer_Setup ( )
70
92
{
71
93
_builder . MapPost ( "/" , ( Todo todo ) => todo ) ;
72
94
for ( var i = 0 ; i <= TransformerCount ; i ++ )
73
95
{
74
- _options . UseSchemaTransformer ( ( schema , context , token ) =>
96
+ _options . AddSchemaTransformer ( ( schema , context , token ) =>
75
97
{
76
98
if ( context . Type == typeof ( Todo ) && context . ParameterDescription != null )
77
99
{
@@ -87,6 +109,12 @@ public void SchemaTransformer_Setup()
87
109
_documentService = CreateDocumentService ( _builder , _options ) ;
88
110
}
89
111
112
+ [ Benchmark ]
113
+ public async Task ActivatedOperationTransformer ( )
114
+ {
115
+ await _documentService . GetOpenApiDocumentAsync ( ) ;
116
+ }
117
+
90
118
[ Benchmark ]
91
119
public async Task OperationTransformerAsDelegate ( )
92
120
{
@@ -106,17 +134,48 @@ public async Task DocumentTransformerAsDelegate()
106
134
}
107
135
108
136
[ Benchmark ]
109
- public async Task SchemaTransformer ( )
137
+ public async Task ActivatedSchemaTransformer ( )
138
+ {
139
+ await _documentService . GetOpenApiDocumentAsync ( ) ;
140
+ }
141
+
142
+ [ Benchmark ]
143
+ public async Task SchemaTransformerAsDelegate ( )
110
144
{
111
145
await _documentService . GetOpenApiDocumentAsync ( ) ;
112
146
}
113
147
114
- private class ActivatedTransformer : IOpenApiDocumentTransformer
148
+ private class DocumentTransformer : IOpenApiDocumentTransformer
115
149
{
116
150
public Task TransformAsync ( OpenApiDocument document , OpenApiDocumentTransformerContext context , CancellationToken cancellationToken )
117
151
{
118
152
document . Info . Description = "Info Description" ;
119
153
return Task . CompletedTask ;
120
154
}
121
155
}
156
+
157
+ private class OperationTransformer : IOpenApiOperationTransformer
158
+ {
159
+ public Task TransformAsync ( OpenApiOperation operation , OpenApiOperationTransformerContext context , CancellationToken cancellationToken )
160
+ {
161
+ operation . Description = "Operation Description" ;
162
+ return Task . CompletedTask ;
163
+ }
164
+ }
165
+
166
+ private class SchemaTransformer : IOpenApiSchemaTransformer
167
+ {
168
+ public Task TransformAsync ( OpenApiSchema schema , OpenApiSchemaTransformerContext context , CancellationToken cancellationToken )
169
+ {
170
+ if ( context . Type == typeof ( Todo ) && context . ParameterDescription != null )
171
+ {
172
+ schema . Extensions [ "x-my-extension" ] = new OpenApiString ( context . ParameterDescription . Name ) ;
173
+ }
174
+ else
175
+ {
176
+ schema . Extensions [ "x-my-extension" ] = new OpenApiString ( "response" ) ;
177
+ }
178
+ return Task . CompletedTask ;
179
+ }
180
+ }
122
181
}
0 commit comments