executeStream<S, E extends Object> method

Stream<S> executeStream<S, E extends Object>(
  1. StreamTask<S, E> task
)

Similar to executeNormal, except that this will return a Stream instead of a Future.

Implementation

Stream<S> executeStream<S, E extends Object>(StreamTask<S, E> task) async* {
  final portName = ExecuteStreamPortGenerator.create(task.constMeta.debugName);
  final receivePort = broadcastPort(portName);

  task.callFfi(receivePort.sendPort.nativePort);

  await for (final raw in receivePort) {
    try {
      yield _transformRust2DartMessage(raw, task.parseSuccessData, task.parseErrorData);
    } on _CloseStreamException {
      receivePort.close();
      break;
    }
  }
}