client<I extends Object, O extends Object> method

Future<O> client<I extends Object, O extends Object>(
  1. Spec<I, O> spec,
  2. Stream<I> input, {
  3. void onHeader(
    1. Headers
    )?,
  4. void onTrailer(
    1. Headers
    )?,
  5. AbortSignal? signal,
  6. Headers? headers,
})

Convenient api over stream for client streaming calls.

Implementation

Future<O> client<I extends Object, O extends Object>(
  Spec<I, O> spec,
  Stream<I> input, {
  void Function(Headers)? onHeader,
  void Function(Headers)? onTrailer,
  AbortSignal? signal,
  Headers? headers,
}) async {
  final res = await t.stream(
    spec,
    input,
    CallOptions(headers: headers, signal: signal),
  );
  onHeader?.call(res.headers);
  O? message;
  var count = 0;
  await for (final next in res.message) {
    message = next;
    count++;
  }
  if (message == null) {
    throw ConnectException(
      Code.unimplemented,
      "protocol error: missing response message",
    );
  }
  if (count > 1) {
    throw ConnectException(
      Code.unimplemented,
      "protocol error: received extra messages for client streaming method",
    );
  }
  onTrailer?.call(res.trailers);
  return message;
}