extract method

  1. @override
Future<Result<T, Rejection>> extract(
  1. Request request
)
override

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'));
  }
}