summaryrefslogtreecommitdiffstats
path: root/third_party/rust/arbitrary/src/error.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/arbitrary/src/error.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/arbitrary/src/error.rs')
-rw-r--r--third_party/rust/arbitrary/src/error.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/third_party/rust/arbitrary/src/error.rs b/third_party/rust/arbitrary/src/error.rs
new file mode 100644
index 0000000000..1d3df2a22e
--- /dev/null
+++ b/third_party/rust/arbitrary/src/error.rs
@@ -0,0 +1,53 @@
+use std::{error, fmt};
+
+/// An enumeration of buffer creation errors
+#[derive(Debug, Clone, Copy)]
+#[non_exhaustive]
+pub enum Error {
+ /// No choices were provided to the Unstructured::choose call
+ EmptyChoose,
+ /// There was not enough underlying data to fulfill some request for raw
+ /// bytes.
+ NotEnoughData,
+ /// The input bytes were not of the right format
+ IncorrectFormat,
+}
+
+impl fmt::Display for Error {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ Error::EmptyChoose => write!(
+ f,
+ "`arbitrary::Unstructured::choose` must be given a non-empty set of choices"
+ ),
+ Error::NotEnoughData => write!(
+ f,
+ "There is not enough underlying raw data to construct an `Arbitrary` instance"
+ ),
+ Error::IncorrectFormat => write!(
+ f,
+ "The raw data is not of the correct format to construct this type"
+ ),
+ }
+ }
+}
+
+impl error::Error for Error {}
+
+/// A `Result` with the error type fixed as `arbitrary::Error`.
+///
+/// Either an `Ok(T)` or `Err(arbitrary::Error)`.
+pub type Result<T, E = Error> = std::result::Result<T, E>;
+
+#[cfg(test)]
+mod tests {
+ // Often people will import our custom `Result` type because 99.9% of
+ // results in a file will be `arbitrary::Result` but then have that one last
+ // 0.1% that want to have a custom error type. Don't make them prefix that
+ // 0.1% as `std::result::Result`; instead, let `arbitrary::Result` have an
+ // overridable error type.
+ #[test]
+ fn can_use_custom_error_types_with_result() -> super::Result<(), String> {
+ Ok(())
+ }
+}