use std::fmt; #[derive(Debug)] pub enum ParseError { ExpectedSurroundingPair, UnknownAlphabet, UnknownColor, ExpectedPaneIdMarker, ExpectedInt(std::num::ParseIntError), ExpectedBool(std::str::ParseBoolError), ProcessFailure(String), } impl fmt::Display for ParseError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { ParseError::ExpectedSurroundingPair => write!(f, "Expected 2 chars"), ParseError::UnknownAlphabet => write!(f, "Expected a known alphabet"), ParseError::UnknownColor => { write!(f, "Expected ANSI color name (magenta, cyan, black, ...)") } ParseError::ExpectedPaneIdMarker => write!(f, "Expected pane id marker"), ParseError::ExpectedInt(msg) => write!(f, "Expected an int: {}", msg), ParseError::ExpectedBool(msg) => write!(f, "Expected a bool: {}", msg), ParseError::ProcessFailure(msg) => write!(f, "{}", msg), } } } impl From for ParseError { fn from(error: std::num::ParseIntError) -> Self { ParseError::ExpectedInt(error) } } impl From for ParseError { fn from(error: std::str::ParseBoolError) -> Self { ParseError::ExpectedBool(error) } } impl From for ParseError { fn from(error: std::io::Error) -> Self { ParseError::ProcessFailure(error.to_string()) } }