5
5
use DoclerLabs \ApiClientException \Factory \ResponseExceptionFactory ;
6
6
use DoclerLabs \ApiClientGenerator \Ast \Builder \CodeBuilder ;
7
7
use DoclerLabs \ApiClientGenerator \Entity \Field ;
8
+ use DoclerLabs \ApiClientGenerator \Entity \Operation ;
8
9
use DoclerLabs \ApiClientGenerator \Generator \Implementation \ContainerImplementationStrategy ;
9
10
use DoclerLabs \ApiClientGenerator \Generator \Implementation \HttpMessageImplementationStrategy ;
10
11
use DoclerLabs \ApiClientGenerator \Input \Specification ;
@@ -63,7 +64,7 @@ public function generate(Specification $specification, PhpFileCollection $fileRe
63
64
64
65
$ classBuilder = $ this ->builder
65
66
->class ('ServiceProvider ' )
66
- ->addStmt ($ this ->generateRegisterMethod ($ compositeFields ));
67
+ ->addStmt ($ this ->generateRegisterMethod ($ specification , $ compositeFields ));
67
68
68
69
foreach ($ this ->containerImplementation ->getContainerRegisterImports () as $ import ) {
69
70
$ this ->addImport ($ import );
@@ -72,8 +73,10 @@ public function generate(Specification $specification, PhpFileCollection $fileRe
72
73
$ this ->registerFile ($ fileRegistry , $ classBuilder );
73
74
}
74
75
75
- public function generateRegisterMethod (array $ compositeFields ): ClassMethod
76
- {
76
+ private function generateRegisterMethod (
77
+ Specification $ specification ,
78
+ array $ compositeFields
79
+ ): ClassMethod {
77
80
$ statements = [];
78
81
79
82
$ param = $ this ->builder
@@ -115,7 +118,7 @@ public function generateRegisterMethod(array $compositeFields): ClassMethod
115
118
$ statements [] = $ this ->containerImplementation ->registerClosure (
116
119
$ containerVariable ,
117
120
$ this ->builder ->classConstFetch ('BodySerializer ' , 'class ' ),
118
- $ this ->generateBodySerializerClosure ()
121
+ $ this ->generateBodySerializerClosure ($ specification )
119
122
);
120
123
$ statements [] = $ this ->containerImplementation ->registerClosure (
121
124
$ containerVariable ,
@@ -180,33 +183,44 @@ private function generateQuerySerializerClosure(): Closure
180
183
);
181
184
}
182
185
183
- private function generateBodySerializerClosure (): Closure
186
+ private function generateBodySerializerClosure (Specification $ specification ): Closure
184
187
{
185
- $ jsonSerializerInit = $ this ->builder ->methodCall (
186
- $ this ->builder ->new ('BodySerializer ' ),
187
- 'add ' ,
188
- [
189
- $ this ->builder ->new ('JsonContentTypeSerializer ' ),
190
- ]
191
- );
188
+ $ initialStatement = $ this ->builder ->new ('BodySerializer ' );
189
+ $ allContentTypes = $ specification ->getAllContentTypes ();
192
190
193
- $ formEncodedSerializerInit = $ this ->builder ->methodCall (
194
- $ jsonSerializerInit ,
195
- 'add ' ,
196
- [
197
- $ this ->builder ->new ('FormUrlencodedContentTypeSerializer ' ),
198
- ]
199
- );
191
+ if (in_array (JsonContentTypeSerializer::MIME_TYPE , $ allContentTypes , true )) {
192
+ $ jsonSerializerInit = $ this ->builder ->methodCall (
193
+ $ initialStatement ,
194
+ 'add ' ,
195
+ [
196
+ $ this ->builder ->new ('JsonContentTypeSerializer ' ),
197
+ ]
198
+ );
199
+ }
200
200
201
- $ xmlSerializerInit = $ this ->builder ->methodCall (
202
- $ formEncodedSerializerInit ,
203
- 'add ' ,
204
- [
205
- $ this ->builder ->new ('XmlContentTypeSerializer ' ),
206
- ]
207
- );
201
+ if (in_array (FormUrlencodedContentTypeSerializer::MIME_TYPE , $ allContentTypes , true )) {
202
+ $ formEncodedSerializerInit = $ this ->builder ->methodCall (
203
+ $ jsonSerializerInit ?? $ initialStatement ,
204
+ 'add ' ,
205
+ [
206
+ $ this ->builder ->new ('FormUrlencodedContentTypeSerializer ' ),
207
+ ]
208
+ );
209
+ }
210
+
211
+ if (in_array (XmlContentTypeSerializer::MIME_TYPE , $ allContentTypes , true )) {
212
+ $ xmlSerializerInit = $ this ->builder ->methodCall (
213
+ $ formEncodedSerializerInit ?? $ jsonSerializerInit ?? $ initialStatement ,
214
+ 'add ' ,
215
+ [
216
+ $ this ->builder ->new ('XmlContentTypeSerializer ' ),
217
+ ]
218
+ );
219
+ }
208
220
209
- $ registerBodySerializerClosureStatements [] = $ this ->builder ->return ($ xmlSerializerInit );
221
+ $ registerBodySerializerClosureStatements [] = $ this
222
+ ->builder
223
+ ->return ($ xmlSerializerInit ?? $ formEncodedSerializerInit ?? $ jsonSerializerInit ?? $ initialStatement );
210
224
211
225
return $ this ->builder ->closure (
212
226
$ registerBodySerializerClosureStatements ,
0 commit comments