in lib/src/common_server_api.dart [117:162]
Future<Response> _processRequest<I, O extends GeneratedMessage>(
Request request, {
required I Function(List<int> bytes) decodeFromProto,
required I Function(Object json) decodeFromJSON,
required Future<O> Function(I input) transform,
}) async {
if (request.mimeType == protobufContentType) {
// Dealing with binary Protobufs
final body = <int>[];
await for (final chunk in request.read()) {
body.addAll(chunk);
}
try {
final response = await transform(decodeFromProto(body));
return Response.ok(
response.writeToBuffer(),
headers: _protobufHeaders,
);
} on BadRequest catch (e) {
return Response(400,
headers: _protobufHeaders,
body: (proto.BadRequest.create()
..error = (proto.ErrorMessage.create()..message = e.cause))
.writeToBuffer());
}
} else {
// Dealing with JSON encoded Protobufs
final body = await request.readAsString();
try {
final response = await transform(
decodeFromJSON(body.isNotEmpty ? json.decode(body) as Object : {}));
return Response.ok(
_jsonEncoder.convert(response.toProto3Json()),
encoding: utf8,
headers: _jsonHeaders,
);
} on BadRequest catch (e) {
return Response(400,
headers: _jsonHeaders,
encoding: utf8,
body: _jsonEncoder.convert((proto.BadRequest.create()
..error = (proto.ErrorMessage.create()..message = e.cause))
.toProto3Json()));
}
}
}