summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fallible_collections/src/try_clone.rs
diff options
context:
space:
mode:
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)
+// }
+// }