use super::StoreError;
#[derive(Debug)]
#[non_exhaustive]
pub enum HiddenRangesCorruption {
ReadFailed(std::io::Error),
TooShort {
actual: usize,
required: usize,
},
BadMagic,
UnsupportedVersion {
observed: u16,
expected: u16,
},
CrcMismatch {
stored: u32,
computed: u32,
},
DecodeFailed(rmp_serde::decode::Error),
MalformedEntries {
source: Box<StoreError>,
},
}
impl std::fmt::Display for HiddenRangesCorruption {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::ReadFailed(error) => {
write!(f, "failed to read visibility-ranges metadata: {error}")
}
Self::TooShort { .. } => write!(f, "visibility-ranges file too short"),
Self::BadMagic => write!(f, "visibility-ranges file has wrong magic"),
Self::UnsupportedVersion { observed, .. } => {
write!(f, "unsupported visibility-ranges version: {observed}")
}
Self::CrcMismatch { .. } => write!(f, "visibility-ranges CRC mismatch"),
Self::DecodeFailed(error) => {
write!(f, "visibility-ranges deserialisation failed: {error}")
}
Self::MalformedEntries { source } => {
write!(
f,
"visibility-ranges file contained malformed entries: {source}"
)
}
}
}
}
impl HiddenRangesCorruption {
pub(super) fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::ReadFailed(error) => Some(error),
Self::DecodeFailed(error) => Some(error),
Self::MalformedEntries { source } => Some(source.as_ref()),
Self::TooShort { .. }
| Self::BadMagic
| Self::UnsupportedVersion { .. }
| Self::CrcMismatch { .. } => None,
}
}
}