blob: 3c7339727ccafd097c106d0cf8d412ff8bbf1d40 [file] [log] [blame] [edit]
import 'package:meta/meta.dart';
import '../../context/context.dart';
import '../../context/result.dart';
import '../../core/parser.dart';
/// Returns a parser that consumes nothing and fails.
///
/// For example, `failure()` always fails, no matter what input it is given.
@useResult
Parser<R> failure<R>([String message = 'unable to parse']) =>
FailureParser<R>(message);
/// A parser that consumes nothing and fails.
class FailureParser<R> extends Parser<R> {
FailureParser(this.message);
/// Error message to annotate parse failures with.
final String message;
@override
Result<R> parseOn(Context context) => context.failure<R>(message);
@override
int fastParseOn(String buffer, int position) => -1;
@override
String toString() => '${super.toString()}[$message]';
@override
FailureParser<R> copy() => FailureParser<R>(message);
@override
bool hasEqualProperties(FailureParser<R> other) =>
super.hasEqualProperties(other) && message == other.message;
}