createParseResult<I, O, R> function

ParseResult<I, R> createParseResult<I, O, R>(
  1. State<I> state,
  2. R result,
  3. bool isSuccess(
    1. R result
    ), {
  4. String errorMessage(
    1. I input,
    2. int offset,
    3. List<ErrorMessage> errors
    )?,
  5. String? locale,
  6. Map<String, MessageLocalization> messages = const {},
  7. Map<String, String> tags = const {},
})

Implementation

ParseResult<I, R> createParseResult<I, O, R>(
  State<I> state,
  R result,
  bool Function(R result) isSuccess, {
  String Function(I input, int offset, List<ErrorMessage> errors)? errorMessage,
  String? locale,
  Map<String, MessageLocalization> messages = const {},
  Map<String, String> tags = const {},
}) {
  final input = state.input;
  if (isSuccess(result)) {
    return ParseResult(
      failPos: state.failPos,
      input: input,
      pos: state.pos,
      result: result,
    );
  }

  final offset = state.failPos;
  final normalized = _normalize(input, offset, state.getErrors());
  final localized =
      _localize(input, offset, normalized, locale, messages, tags);
  String? message;
  if (errorMessage != null) {
    message = errorMessage(input, offset, localized);
  } else if (input is StringReader) {
    if (input.source != null) {
      message = _errorMessage(input.source!, offset, localized);
    } else {
      message = _errorMessage2(input, offset, localized);
    }
  } else if (input is String) {
    message = _errorMessage(input, offset, localized);
  } else {
    message = localized.join('\n');
  }

  return ParseResult(
    errors: localized,
    failPos: state.failPos,
    input: input,
    errorMessage: message,
    pos: state.pos,
    result: result,
  );
}