summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fallible_collections/src/try_clone.rs
blob: a8ff0442b4b80e69eae3feb90dda005053780f7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)
//     }
// }