next<Result> method

Stream<Result> next<Result>(
  1. FutureOr<DSHNextResult<IteratorState, Result>> next(
    1. DSHState<IteratorState, Result> it
    )
)

Implementation

Stream<Result> next<Result>(
  FutureOr<DSHNextResult<IteratorState, Result>> Function(
    DSHState<IteratorState, Result> it,
  )
      next,
) {
  DSHState<IteratorState, Result> state = DSHState(initialState);
  bool done = false;
  return dataStreamWrapper(() async {
    if (done) return null;
    final rnext = await next(state);

    if (rnext is DSHNextResultNext<IteratorState, Result>) {
      state = DSHState(rnext.nextState);
      return rnext.data;
    }
    if (rnext is DSHNextResultDone<IteratorState, Result> &&
        rnext.data != null) {
      done = true;
      return rnext.data!;
    }
    return null;
  });
}