extract method
Produces the value, or the rejection that stops the handler.
Implementation
@override
Future<Result<T, Rejection>> extract(Request request) async {
final Object? value;
switch (await _decodeJsonBody(request, limit)) {
case Err(:final error):
return Err(error);
case Ok(value: final decoded):
value = decoded;
}
if (value is! Map<String, Object?>) {
return const Err(
Rejection.unprocessable({}, message: 'expected a JSON object'),
);
}
try {
return Ok(deserialize(value));
} on Object catch (error) {
return Err(decodeRejection(error, subject: 'JSON body'));
}
}