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 reader) : QampException(message, reader.CurrentPosition) { public readonly IReader Reader = reader; } public class TokenException(string message, IReader 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; }