Skip to main content

repline/
error.rs

1use crate::iter::chars::BadUnicode;
2
3/// Result type for Repline
4pub type ReplResult<T> = std::result::Result<T, Error>;
5/// Borrowed error (does not implement [Error](std::error::Error)!)
6#[derive(Debug)]
7pub enum Error {
8    /// User broke with Ctrl+C
9    CtrlC(String),
10    /// User broke with Ctrl+D
11    CtrlD(String),
12    /// Invalid unicode codepoint
13    BadUnicode(u32),
14    /// Error came from [std::io]
15    IoFailure(std::io::Error),
16    /// End of input
17    EndOfInput,
18}
19
20impl std::error::Error for Error {}
21
22impl std::fmt::Display for Error {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        match self {
25            Error::CtrlC(_) => write!(f, "Ctrl+C"),
26            Error::CtrlD(_) => write!(f, "Ctrl+D"),
27            Error::BadUnicode(u) => write!(f, "\\u{{{u:x}}} is not a valid unicode codepoint"),
28            Error::IoFailure(s) => write!(f, "{s}"),
29            Error::EndOfInput => write!(f, "End of input"),
30        }
31    }
32}
33
34impl From<std::io::Error> for Error {
35    fn from(value: std::io::Error) -> Self {
36        Self::IoFailure(value)
37    }
38}
39
40impl From<BadUnicode> for Error {
41    fn from(value: BadUnicode) -> Self {
42        let BadUnicode(code) = value;
43        Self::BadUnicode(code)
44    }
45}