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
40
41
use crate::{AsIs, AsIsMut, Is, IsCow, IsMut, ToOwned};

mod string;
pub use string::StringStub;

mod vec;
pub use vec::VecStub;

#[cfg(feature = "alloc")]
mod cow;

macro_rules! impl_as_is_for_copy_type {
    ($($T:ty),*$(,)?) => {
        $(
            impl AsIs for $T {
                type Is = Self;

                fn as_is<'a>(self) -> Is<'a, Self::Is> {
                    Is::Owned(self)
                }

                fn borrow_or_clone<B: ?Sized>(&self) -> IsCow<'_, B>
                where
                    B: ToOwned<Owned = Self>
                {
                    IsCow::Owned(*self)
                }
            }

            impl AsIsMut for $T {
                fn as_is_mut<'a>(self) -> IsMut<'a, Self::Is> {
                    IsMut::Owned(self)
                }
            }
        )*
    };
}

impl_as_is_for_copy_type!(
    i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, bool,
);