1use rustyline::error::ReadlineError;
4use std::{error::Error, fmt::Display};
5
6#[non_exhaustive]
8#[derive(Debug)]
9pub enum ClackError {
10 IoError(std::io::Error),
12 Cancelled,
14 ReadlineError(ReadlineError),
16 NoOptions,
18}
19
20impl Error for ClackError {
21 fn source(&self) -> Option<&(dyn Error + 'static)> {
22 match self {
23 ClackError::IoError(source) => Some(source),
24 ClackError::Cancelled => None,
25 ClackError::ReadlineError(source) => Some(source),
26 ClackError::NoOptions => None,
27 }
28 }
29}
30
31impl Display for ClackError {
32 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
33 match self {
34 ClackError::IoError(_) => f.write_str("io error"),
35 ClackError::Cancelled => f.write_str("operation cancelled"),
36 ClackError::ReadlineError(_) => f.write_str("readline error"),
37 ClackError::NoOptions => f.write_str("no options specified"),
38 }
39 }
40}
41
42impl From<std::io::Error> for ClackError {
43 fn from(source: std::io::Error) -> Self {
44 ClackError::IoError(source)
45 }
46}
47
48impl From<ReadlineError> for ClackError {
49 fn from(source: ReadlineError) -> Self {
50 ClackError::ReadlineError(source)
51 }
52}