qamp/Qrakhen.Qamp.Core/Exceptions.cs

36 lines
1.1 KiB
C#

using Qrakhen.Qamp.Core.Tokenization;
using Qrakhen.Qamp.Core.Values;
using V = Qrakhen.Qamp.Core.Values.ValueType;
namespace Qrakhen.Qamp.Core;
public class QampException(string message, TokenPosition position = default)
: Exception(message)
{
public readonly TokenPosition Position = position;
}
public class ReaderException(string message, IReader<Token> reader)
: QampException(message, reader.CurrentPosition)
{
public readonly IReader<Token> Reader = reader;
}
public class TokenException(string message, IReader<Token> reader, Token token)
: ReaderException($"TokenError {token} at {token.Position}: {message}", reader)
{
public readonly Token Token = token;
}
public class ExecutionException(string message, TokenPosition position = default)
: QampException(message, position);
public class DivisionByZeroException(string? message, TokenPosition position = default)
: ExecutionException(message ?? "Can not divide by zero", position);
public class ConversionException(string message, Value value, TokenPosition position = default)
: ExecutionException(message, position)
{
public readonly Value Value = value;
}