parseAsync method

  1. @override
AsyncResult<Object?> parseAsync(
  1. State<ChunkedData<StringReader>> state
)
override

Experimental. Not yet fully implemented

Implementation

@override
AsyncResult<Object?> parseAsync(State<ChunkedData<StringReader>> state) {
  final result = AsyncResult<Object?>();
  if (!backtrack(state)) {
    result.ok = false;
    return result;
  }

  final input = state.input;
  final end = input.end;
  if (state.pos < end) {
    state.fail<Object?>(const ErrorExpectedEndOfInput());
    result.ok = false;
    input.handler = result.handler;
    return result;
  }

  void parse() {
    final end = input.end;
    if (state.pos >= end && !input.isClosed) {
      input.sleep = true;
      input.handler = parse;
      return;
    }

    if (result.ok = state.pos >= end) {
      result.value = const Result<Object?>(null);
    } else {
      state.fail<Object?>(const ErrorExpectedEndOfInput());
    }

    input.handler = result.handler;
  }

  parse();
  return result;
}