wrapper 0.1.1

A trait for types that wrap other types.
Documentation
use base::cell::{Cell, RefCell, UnsafeCell};
use base::cmp::Reverse;
use base::mem::ManuallyDrop;
use base::num::Wrapping;

#[cfg(feature = "unstable")]
use maybe_std::{pin::Pin, ops::Deref};

use crate::Wrapper;

implement_into_inner_t!(Cell<T>);
implement_into_inner_t!(RefCell<T>);
implement_into_inner_t!(UnsafeCell<T>);

implement_newtype_t!(Reverse<T>);

implement_into_inner_t!(ManuallyDrop<T>);

macro_rules! implement_nonzero {
    ($t:ty, $from:ty) => {
        impl Wrapper<$from> for $t {
            fn into_inner(self) -> $from {
                self.get()
            }
        }
    }
}

implement_nonzero!(core::num::NonZeroU8, u8);
implement_nonzero!(core::num::NonZeroU16, u16);
implement_nonzero!(core::num::NonZeroU32, u32);
implement_nonzero!(core::num::NonZeroU64, u64);
implement_nonzero!(core::num::NonZeroU128, u128);
implement_nonzero!(core::num::NonZeroUsize, usize);
implement_nonzero!(core::num::NonZeroI8, i8);
implement_nonzero!(core::num::NonZeroI16, i16);
implement_nonzero!(core::num::NonZeroI32, i32);
implement_nonzero!(core::num::NonZeroI64, i64);
implement_nonzero!(core::num::NonZeroI128, i128);
implement_nonzero!(core::num::NonZeroIsize, isize);

implement_newtype_t!(Wrapping<T>);

#[cfg(feature = "unstable")]
impl<T: Deref<Target: Unpin>> Wrapper<T> for Pin<T> {
    fn into_inner(self) -> T {
        Pin::into_inner(self)
    }
}

implement_into_inner!(core::sync::atomic::AtomicBool, bool);
implement_into_inner!(core::sync::atomic::AtomicI8, i8);
implement_into_inner!(core::sync::atomic::AtomicI16, i16);
implement_into_inner!(core::sync::atomic::AtomicI32, i32);
implement_into_inner!(core::sync::atomic::AtomicI64, i64);
implement_into_inner!(core::sync::atomic::AtomicIsize, isize);
implement_into_inner!(core::sync::atomic::AtomicU8, u8);
implement_into_inner!(core::sync::atomic::AtomicU16, u16);
implement_into_inner!(core::sync::atomic::AtomicU32, u32);
implement_into_inner!(core::sync::atomic::AtomicU64, u64);
implement_into_inner!(core::sync::atomic::AtomicUsize, usize);