use std::io;
#[derive(Debug)]
pub enum CompletersError {
ShellCode(ShellCodeError),
MissingField,
InvalidValue {
field: String,
value: String,
what: String,
},
UnrecognizedEnvVar(String),
Custom(String),
}
impl std::fmt::Display for CompletersError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::ShellCode(err) => {
write!(f, "Shell code error: {err}")
}
Self::MissingField => write!(f, "Missing required field"),
Self::InvalidValue { field, value, what } => {
write!(f, "Invalid value for field {field}: {value} ({what})")
}
Self::UnrecognizedEnvVar(value) => {
write!(f, "Unrecognized environment variable value: {value}")
}
Self::Custom(message) => write!(f, "Custom error: {message}"),
}
}
}
impl std::error::Error for CompletersError {}
impl From<ShellCodeError> for CompletersError {
fn from(err: ShellCodeError) -> Self {
Self::ShellCode(err)
}
}
#[derive(Debug)]
pub enum ShellCodeError {
IO(io::Error),
Encoding(String),
}
impl std::fmt::Display for ShellCodeError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::IO(err) => {
write!(f, "IO error: {err}")
}
Self::Encoding(message) => {
write!(f, "Encoding error: {message}")
}
}
}
}
impl std::error::Error for ShellCodeError {}
impl From<io::Error> for ShellCodeError {
fn from(err: io::Error) -> Self {
Self::IO(err)
}
}