fromShelfRequest<R, Res extends BaseResponse> static method
Future<ShelfCommandRequest<R> >
fromShelfRequest<R, Res extends BaseResponse>(
- Request shelfRequest,
- 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,
);
}