use std::fmt;
pub type Result<T> = std::result::Result<T, ProtocolError>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ProtocolError {
message: String,
}
impl ProtocolError {
pub fn message(message: impl fmt::Display) -> Self {
Self {
message: message.to_string(),
}
}
pub fn context(self, context: impl fmt::Display) -> Self {
Self {
message: format!("{context}: {}", self.message),
}
}
}
impl fmt::Display for ProtocolError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(&self.message)
}
}
impl std::error::Error for ProtocolError {}
impl From<serde_json::Error> for ProtocolError {
fn from(source: serde_json::Error) -> Self {
Self::message(source)
}
}