@@ -178,7 +178,7 @@ private Optional<FieldSpec> serializer(EndpointName endpointName, Type type) {
178
178
private Optional <FieldSpec > deserializer (
179
179
TypeName responseType , EndpointDefinition endpointDef , EndpointName endpointName , Optional <Type > type ) {
180
180
TypeName className = Primitives .box (returnTypes .baseType (type ));
181
- if (isBinaryOrOptionalBinary (className , returnTypes )) {
181
+ if (isBinaryOrOptionalBinary (className , returnTypes ) && ! options . generateDialogueEndpointErrorResultTypes () ) {
182
182
return Optional .empty ();
183
183
}
184
184
ParameterizedTypeName deserializerType =
@@ -188,7 +188,7 @@ private Optional<FieldSpec> deserializer(
188
188
"$L.bodySerDe().$L" ,
189
189
StaticFactoryMethodGenerator .RUNTIME ,
190
190
options .generateDialogueEndpointErrorResultTypes ()
191
- ? constructDeserializerWithEndpointErrors (endpointDef , responseType )
191
+ ? constructDeserializerWithEndpointErrors (endpointDef , className , responseType )
192
192
: constructDeserializer (type , className ));
193
193
194
194
return Optional .of (FieldSpec .builder (deserializerType , endpointName + "Deserializer" )
@@ -203,8 +203,9 @@ private CodeBlock constructDeserializer(Optional<Type> type, TypeName className)
203
203
: CodeBlock .of ("emptyBodyDeserializer()" );
204
204
}
205
205
206
- private CodeBlock constructDeserializerWithEndpointErrors (EndpointDefinition endpointDef , TypeName responseType ) {
207
- CodeBlock .Builder retBuilder = CodeBlock .builder ()
206
+ private CodeBlock constructDeserializerWithEndpointErrors (
207
+ EndpointDefinition endpointDef , TypeName className , TypeName responseType ) {
208
+ CodeBlock .Builder deserializerArgsBuilder = CodeBlock .builder ()
208
209
.add ("$T.<$T>builder()" , DeserializerArgs .class , responseType )
209
210
.add (".baseType(new $T<>() {})" , TypeMarker .class )
210
211
// TODO(pm): consider making "Success" a constant string for re-use in the record creation.
@@ -217,15 +218,21 @@ private CodeBlock constructDeserializerWithEndpointErrors(EndpointDefinition end
217
218
errorTypeName .getPackage (),
218
219
ErrorGenerationUtils .errorTypesClassName (errorTypeName .getNamespace ()),
219
220
errorType );
220
- retBuilder .add (
221
+ deserializerArgsBuilder .add (
221
222
".error($T.name(), new $T<$T.$L>() {})" , errorClass , TypeMarker .class , responseType , errorName );
222
223
}
223
- retBuilder .add (".build()" );
224
- return CodeBlock .builder ()
225
- .add ("deserializer(" )
226
- .add (retBuilder .build ())
227
- .add (")" )
228
- .build ();
224
+ deserializerArgsBuilder .add (".build()" );
225
+ CodeBlock .Builder deserializerBuilder = CodeBlock .builder ();
226
+ if (isBinary (className , returnTypes )) {
227
+ deserializerBuilder .add ("inputStreamDeserializer(" );
228
+ } else if (isOptionalBinary (className , returnTypes )) {
229
+ deserializerBuilder .add ("optionalInputStreamDeserializer(" );
230
+ } else {
231
+ deserializerBuilder .add ("deserializer(" );
232
+ }
233
+ deserializerBuilder .add (deserializerArgsBuilder .build ());
234
+ deserializerBuilder .add (")" );
235
+ return deserializerBuilder .build ();
229
236
}
230
237
231
238
private static boolean isBinaryOrOptionalBinary (TypeName className , ReturnTypeMapper returnTypes ) {
@@ -279,7 +286,8 @@ private MethodSpec clientImpl(ClassName className, EndpointDefinition def) {
279
286
Names .endpointChannel (def ),
280
287
REQUEST ,
281
288
def .getReturns ()
282
- .filter (type -> isBinaryOrOptionalBinary (returnTypes .baseType (type ), returnTypes ))
289
+ .filter (type -> !options .generateDialogueEndpointErrorResultTypes ()
290
+ && isBinaryOrOptionalBinary (returnTypes .baseType (type ), returnTypes ))
283
291
.map (type -> StaticFactoryMethodGenerator .RUNTIME
284
292
+ (isOptionalBinary (returnTypes .baseType (type ), returnTypes )
285
293
? ".bodySerDe().optionalInputStreamDeserializer()"
0 commit comments