use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Error {
BadVersion(String),
UnsupportedMajor(u64),
UnsupportedMinor(u64),
EmptyPath(usize),
EmptyPathSegment(usize),
EmptyAttrName(usize),
EmptyValueSet(usize, String),
DuplicatePath(Vec<String>),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::BadVersion(v) => write!(f, "protocol_version is not MAJOR.MINOR.PATCH: {v:?}"),
Error::UnsupportedMajor(m) => write!(
f,
"unsupported protocol MAJOR {m} (this implementation supports {})",
crate::SUPPORTED_PROTOCOL_MAJOR
),
Error::UnsupportedMinor(m) => write!(
f,
"unsupported protocol MINOR {m} while MAJOR is 0 (this implementation supports 0.{})",
crate::SUPPORTED_PROTOCOL_MINOR
),
Error::EmptyPath(i) => write!(f, "node at index {i} has an empty path"),
Error::EmptyPathSegment(i) => write!(f, "node at index {i} has an empty path segment"),
Error::EmptyAttrName(i) => write!(f, "node at index {i} has an empty attribute name"),
Error::EmptyValueSet(i, name) => {
write!(f, "node at index {i}: attribute {name:?} has an empty value set")
}
Error::DuplicatePath(p) => write!(f, "duplicate node path within snapshot: {p:?}"),
}
}
}
impl std::error::Error for Error {}