diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/scroll/src/error.rs | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/scroll/src/error.rs')
-rw-r--r-- | third_party/rust/scroll/src/error.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/third_party/rust/scroll/src/error.rs b/third_party/rust/scroll/src/error.rs new file mode 100644 index 0000000000..0257544139 --- /dev/null +++ b/third_party/rust/scroll/src/error.rs @@ -0,0 +1,68 @@ +use core::fmt::{self, Display}; +use core::result; + +#[cfg(feature = "std")] +use std::io; +#[cfg(feature = "std")] +use std::error; + +#[derive(Debug)] +/// A custom Scroll error +pub enum Error { + /// The type you tried to read was too big + TooBig { size: usize, len: usize }, + /// The requested offset to read/write at is invalid + BadOffset(usize), + BadInput{ size: usize, msg: &'static str }, + #[cfg(feature = "std")] + /// A custom Scroll error for reporting messages to clients + Custom(String), + #[cfg(feature = "std")] + /// Returned when IO based errors are encountered + IO(io::Error), +} + +#[cfg(feature = "std")] +impl error::Error for Error { + fn description(&self) -> &str { + match *self { + Error::TooBig{ .. } => { "TooBig" } + Error::BadOffset(_) => { "BadOffset" } + Error::BadInput{ .. } => { "BadInput" } + Error::Custom(_) => { "Custom" } + Error::IO(_) => { "IO" } + } + } + fn cause(&self) -> Option<&dyn error::Error> { + match *self { + Error::TooBig{ .. } => { None } + Error::BadOffset(_) => { None } + Error::BadInput{ .. } => { None } + Error::Custom(_) => { None } + Error::IO(ref io) => { io.source() } + } + } +} + +#[cfg(feature = "std")] +impl From<io::Error> for Error { + fn from(err: io::Error) -> Error { + Error::IO(err) + } +} + +impl Display for Error { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match *self { + Error::TooBig{ ref size, ref len } => { write! (fmt, "type is too big ({}) for {}", size, len) }, + Error::BadOffset(ref offset) => { write! (fmt, "bad offset {}", offset) }, + Error::BadInput{ ref msg, ref size } => { write! (fmt, "bad input {} ({})", msg, size) }, + #[cfg(feature = "std")] + Error::Custom(ref msg) => { write! (fmt, "{}", msg) }, + #[cfg(feature = "std")] + Error::IO(ref err) => { write!(fmt, "{}", err) }, + } + } +} + +pub type Result<T> = result::Result<T, Error>; |