using System.Runtime.CompilerServices;
using CanonSharp.Combinator.Abstractions;
using CanonSharp.Combinator.Results;
namespace CanonSharp.Combinator;
///
/// 相关的扩展方法
///
public static class ParseResultBuilder
{
///
/// 生成解析成功的结果
///
/// 解析成功的对象
/// 下一个输入流状态
/// 输入流类型
/// 输入流状态类型
/// 解析成功的对象类型
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IParseResult Succeed(T value, TState state)
where TState : IReadState
=> new InternalSuccessfulResult(value, state);
///
/// 生成错误类型的解析失败结果
///
/// 解析的输入流状态
/// 输入流类型
/// 输入流状态类型
/// 解析成功的对象类型
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IParseResult Fail(TState state)
where TState : IReadState
=> new FailedResultWithError(state);
///
/// 生成消息类型的解析失败结果
///
/// 错误消息
/// 输入流状态
/// 输入流类型
/// 输入流状态类型
/// 解析成功的对象类型
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IParseResult Fail(string message, TState state)
where TState : IReadState
=> new FailedResultWithMessage(message, state);
///
/// 生成异常类型的解析失败结果
///
/// 解析异常
/// 输入流状态
/// 输入流类型
/// 输入流状态类型
/// 解析成功的对象类型
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IParseResult Fail(Exception exception, TState state)
where TState : IReadState
=> new FailedResultWithException(exception, state);
}