parseAsync method

  1. @override
void parseAsync(
  1. State<ChunkedData<I>> state,
  2. ResultCallback<(List<O1>, O2)> onDone
)
override

Implementation

@override
void parseAsync(
    State<ChunkedData<I>> state, ResultCallback<(List<O1>, O2)> onDone) {
  final input = state.input;
  final pos = state.pos;
  final list = <O1>[];
  void parse3() {
    void parse4() {
      p.parseAsync(state, (result) {
        if (result == null) {
          state.pos = pos;
          onDone(null);
        } else {
          list.add(result.value);
          input.handle(parse3);
        }
      });
    }

    end.parseAsync(state, (result) {
      if (result == null) {
        input.handle(parse4);
      } else {
        onDone(Result((list, result.value)));
      }
    });
  }

  void parse2() {
    p.parseAsync(state, (result) {
      if (result == null) {
        onDone(null);
      } else {
        list.add(result.value);
        input.handle(parse3);
      }
    });
  }

  void parse() {
    end.parseAsync(state, (result) {
      if (result == null) {
        input.handle(parse2);
      } else {
        onDone(Result(([], result.value)));
      }
    });
  }

  parse();
}