From 2aa4a82499d4becd2284cdb482213d541b8804dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 16:29:10 +0200 Subject: Adding upstream version 86.0.1. Signed-off-by: Daniel Baumann --- third_party/rust/scroll/src/error.rs | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 third_party/rust/scroll/src/error.rs (limited to 'third_party/rust/scroll/src/error.rs') 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 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 = result::Result; -- cgit v1.2.3