using Qrakhen.Qamp.Core.Collections.Abstractions; using Qrakhen.Qamp.Core.Tokenization; using Qrakhen.Qamp.Core.Values; namespace Qrakhen.Qamp.Core; public class QampException(string message, object? context = null) : Exception(message) { public readonly object? Context = context; } 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 RuntimeException(string message, object? context = null) : QampException(message, context); public class DivisionByZeroException(string? message, object? context = null) : RuntimeException(message ?? "Can not divide by zero", context); public class ConversionException(string message, Value value, object? context = null) : RuntimeException(message, context) { public readonly Value Value = value; }