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