use std::fmt;
#[derive(Debug)]
#[non_exhaustive]
pub enum SerdeError {
TypeMismatch {
message: String,
},
MissingMember {
member_name: String,
},
UnknownMember {
member_name: String,
},
InvalidInput {
message: String,
},
UnsupportedOperation {
message: String,
},
WriteFailed {
message: String,
},
Custom {
message: String,
},
}
impl fmt::Display for SerdeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SerdeError::TypeMismatch { message } => write!(f, "type mismatch: {message}"),
SerdeError::MissingMember { member_name } => {
write!(f, "missing required member: {member_name}")
}
SerdeError::UnknownMember { member_name } => {
write!(f, "unknown member: {member_name}")
}
SerdeError::InvalidInput { message } => write!(f, "invalid input: {message}"),
SerdeError::UnsupportedOperation { message } => {
write!(f, "unsupported operation: {message}")
}
SerdeError::WriteFailed { message } => write!(f, "write failed: {message}"),
SerdeError::Custom { message } => f.write_str(message),
}
}
}
impl std::error::Error for SerdeError {}
impl SerdeError {
pub fn custom(message: impl Into<String>) -> Self {
SerdeError::Custom {
message: message.into(),
}
}
}