using CanonSharp.Combinator.Abstractions;
namespace CanonSharp.Combinator.Parsers.Primitives;
/// 
/// 满足指定条件即成功的解析器
/// 
/// 满足的条件谓词
/// 输入流类型
internal sealed class SatisfyParser(Func predicate) : PrimitiveParser
{
    protected override IParseResult Run(TState state)
    {
        return state.HasValue && predicate(state.Current)
            ? ParseResultBuilder.Succeed(state.Current, state.Next)
            : ParseResultBuilder.Fail(state);
    }
}