This repository has been archived on 2023-09-20. You can view files and clone it, but cannot push or open issues or pull requests.
rust-opensmtpd/src/errors.rs
Rodolphe Breard 24b332c615 Refactor the reader/dispatcher
The previous design did not handled errors correctly and was kind of
spaghetti code. With the new one, the reader and the dispatcher are
clearly separated. The filter will only exit on an error from the reader
or if EOF has been reached, any other error is displayed but does not
exit the filter, which is required by the API. If the filter must exit,
all threads are gracefully stopped.
2018-12-29 20:22:37 +01:00

44 lines
1 KiB
Rust

use crate::entry::Entry;
pub struct Error {
message: String,
}
impl Error {
pub fn new(msg: &str) -> Self {
Error {
message: msg.to_string(),
}
}
pub fn from_string(msg: &String) -> Self {
Error::new(&msg)
}
pub fn display(&self) {
eprintln!("Error: {}", self.message);
}
}
impl From<std::io::Error> for Error {
fn from(error: std::io::Error) -> Self {
Error::from_string(&format!("IO error: {}", error))
}
}
impl From<nom::Err<&str>> for Error {
fn from(error: nom::Err<&str>) -> Self {
let msg = match error {
nom::Err::Incomplete(_) => "not enough data".to_string(),
nom::Err::Error(c) => format!("{:?}", c),
nom::Err::Failure(c) => format!("{:?}", c),
};
Error::from_string(&format!("Parsing error: {}", msg))
}
}
impl From<std::sync::mpsc::SendError<Entry>> for Error {
fn from(error: std::sync::mpsc::SendError<Entry>) -> Self {
Error::from_string(&format!("IO error: {}", error))
}
}