fromShelfRequest<R, Res extends BaseResponse> static method

Future<ShelfCommandRequest<R>> fromShelfRequest<R, Res extends BaseResponse>(
  1. Request shelfRequest,
  2. HttpContract<R, Res> contract
)

Implementation

static Future<ShelfCommandRequest<R>> fromShelfRequest<R, Res extends http.BaseResponse>(
  Request shelfRequest,
  HttpContract<R, Res> contract,
) async {
  // Validate Headers
  final headers = shelfRequest.headers;
  if (contract.headers != null) {
    contract.headers!.parse(headers);
  }

  // Validate Query
  ObjectData<R>? queryData;
  if (contract.query != null) {
    final queryParams = shelfRequest.url.queryParameters;
    final parsedQuery = contract.query!.parse(queryParams);
    queryData = ObjectData<R>(parsedQuery as Map<String, dynamic>);
  }

  // Validate Body
  final bodyText = await shelfRequest.readAsString();
  final decodedBody = bodyText.isNotEmpty ? jsonDecode(bodyText) : null;
  final parsedBody = contract.body!.parse(decodedBody ?? <String, dynamic>{});
  final bodyData = ObjectData<R>(parsedBody as Map<String, dynamic>);

  return ShelfCommandRequest<R>(
    shelfRequest: shelfRequest,
    query: queryData,
    headers: headers,
    body: bodyData,
  );
}