using CanonSharp.Combinator.Abstractions;
namespace CanonSharp.Combinator.Parsers.Modifiers;
///
/// 成功映射的解析器
///
/// 上游解析器
/// 当上游成功时的处理函数
/// 当上游失败时的处理函数
/// 输入流类型
/// 上游解析器解析结果类型
/// 最终的解析结果类型
internal sealed class SuccessfulMapParser(
IParser parser,
Func successfulHandler,
Func, T> failedHandler) : ModifiedParser(parser)
{
protected override IParseResult Succeed(TState state,
ISuccessfulResult successfulResult)
=> successfulResult.Map(successfulHandler);
protected override IParseResult Fail(TState state,
IFailedResult failedResult)
=> ParseResultBuilder.Succeed(failedHandler(failedResult), state);
}