1use rustyline::error::ReadlineError;
2use std::fmt::{Display, Formatter};
3use std::io;
4use std::num::ParseIntError;
5use thiserror::Error;
6
7pub type MyResult<T> = Result<T, MyError>;
8
9#[derive(Debug, Error, PartialEq)]
10pub enum EngineError {
11 ParseError(String),
12 MissingValue,
13 MissingUndo,
14 MissingRedo,
15 MissingClip,
16 BadTimeOp,
17 BadApplyOp,
18}
19
20impl Display for EngineError {
21 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
22 match self {
23 Self::ParseError(token) => write!(f, "Invalid number or keyword: {}", token),
24 Self::MissingValue => write!(f, "Not enough values on stack"),
25 Self::MissingUndo => write!(f, "Start of undo history"),
26 Self::MissingRedo => write!(f, "End of undo history"),
27 Self::MissingClip => write!(f, "No value on clipboard"),
28 Self::BadTimeOp => write!(f, "Unsupported time operation"),
29 Self::BadApplyOp => write!(f, "Unsupported apply operation (must be unary)"),
30 }
31 }
32}
33
34#[derive(Debug, Error)]
35pub enum MyError {
36 #[error(transparent)]
37 Chrono(#[from] chrono::ParseError),
38 #[error(transparent)]
39 Clap(#[from] clap::error::Error),
40 #[error(transparent)]
41 Io(#[from] io::Error),
42 #[error(transparent)]
43 ParseBigInt(#[from] num::bigint::ParseBigIntError),
44 #[error(transparent)]
45 ParseBigRatio(#[from] big_rational_str::ParseError),
46 #[error(transparent)]
47 ParseInt(#[from] ParseIntError),
48 #[error(transparent)]
49 Readline(#[from] ReadlineError),
50 #[error(transparent)]
51 Engine(#[from] EngineError),
52}