sendWithOptions method

Future<StreamedResponse> sendWithOptions(
  1. BaseRequest request,
  2. ProtobufOptions options
)

Implementation

Future<StreamedResponse> sendWithOptions(
    BaseRequest request, ProtobufOptions options) async {
  if (options.requestMessage != null && options.shouldSerialize(request)) {
    logger?.fine(
        '[${request.url}] Serializing ${options.requestMessage.runtimeType} body with protobuf');
    request = _createRequest(request, options);
  }

  if (options.responseMessage != null) {
    request.headers[HttpHeaders.acceptHeader] = options.contentType;
  }

  var result = await super.sendWithOptions(request, options);

  if (options.responseMessage != null && options.shouldDeserialize(result)) {
    logger?.fine(
        '[${request.url}] Deserializing ${options.responseMessage.runtimeType} content with protobuf');
    final responseBytes = await result.stream.toBytes();
    options.responseMessage!.mergeFromBuffer(responseBytes);
    return StreamedResponse(
        Stream.fromIterable([responseBytes]), result.statusCode,
        contentLength: responseBytes.length,
        headers: result.headers,
        isRedirect: result.isRedirect,
        reasonPhrase: result.reasonPhrase,
        request: request,
        persistentConnection: result.persistentConnection);
  }

  return result;
}