summaryrefslogtreecommitdiffstats
path: root/third_party/rust/scroll/src/error.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/scroll/src/error.rs
parentInitial commit. (diff)
downloadfirefox-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.rs68
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>;