use core::fmt;
use crate::record::Tag;
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[non_exhaustive]
pub enum Error {
Truncated {
needed: usize,
available: usize,
},
BufferFull {
needed: usize,
available: usize,
},
LengthOverflow,
NotUtf8,
Malformed(
&'static str,
),
UnsupportedVersion {
tag: Tag,
version: u16,
},
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Truncated { needed, available } => write!(
f,
"record is truncated: wanted {needed} bytes, {available} available"
),
Self::BufferFull { needed, available } => write!(
f,
"output buffer is full: wanted {needed} bytes, {available} available"
),
Self::LengthOverflow => f.write_str("a length field does not fit in a pointer"),
Self::NotUtf8 => f.write_str("a text field is not valid UTF-8"),
Self::Malformed(what) => write!(f, "malformed record: {what}"),
Self::UnsupportedVersion { tag, version } => write!(
f,
"record {tag} is at version {version}, which this build does not understand"
),
}
}
}
impl core::error::Error for Error {}
pub type Result<T> = core::result::Result<T, Error>;