summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fallible_collections/src/try_clone.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/fallible_collections/src/try_clone.rs
parentInitial commit. (diff)
downloadfirefox-esr-upstream.tar.xz
firefox-esr-upstream.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/fallible_collections/src/try_clone.rs')
-rw-r--r--third_party/rust/fallible_collections/src/try_clone.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/third_party/rust/fallible_collections/src/try_clone.rs b/third_party/rust/fallible_collections/src/try_clone.rs
new file mode 100644
index 0000000000..a8ff0442b4
--- /dev/null
+++ b/third_party/rust/fallible_collections/src/try_clone.rs
@@ -0,0 +1,39 @@
+//! this module implements try clone for primitive rust types
+
+use super::TryClone;
+use crate::TryReserveError;
+
+macro_rules! impl_try_clone {
+ ($($e: ty),*) => {
+ $(impl TryClone for $e {
+ #[inline(always)]
+ fn try_clone(&self) -> Result<Self, TryReserveError>
+ where
+ Self: core::marker::Sized,
+ {
+ Ok(*self)
+ }
+ }
+ )*
+ }
+}
+
+impl_try_clone!(u8, u16, u32, u64, i8, i16, i32, i64, usize, isize, bool);
+
+impl<T: TryClone> TryClone for Option<T> {
+ #[inline]
+ fn try_clone(&self) -> Result<Self, TryReserveError> {
+ Ok(match self {
+ Some(t) => Some(t.try_clone()?),
+ None => None,
+ })
+ }
+}
+// impl<T: Copy> TryClone for T {
+// fn try_clone(&self) -> Result<Self, TryReserveError>
+// where
+// Self: core::marker::Sized,
+// {
+// Ok(*self)
+// }
+// }