Diffstat (limited to 'src/any/static_wrapper.rs')
| -rw-r--r-- | src/any/static_wrapper.rs | 116 |
1 files changed, 98 insertions, 18 deletions
diff --git a/src/any/static_wrapper.rs b/src/any/static_wrapper.rs index dee90d6..fb719e0 100644 --- a/src/any/static_wrapper.rs +++ b/src/any/static_wrapper.rs @@ -3,48 +3,114 @@ use super::*; /// Impl of [`TypeNameable`] for `'static` types that are owned (`T`). +#[derive(PartialEq, Clone, Copy, Debug)] #[repr(transparent)] pub struct OwnedStatic<T: ?Sized>(pub T); -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for OwnedStatic<T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynOwnedStatic['lt][T][]: MaybeSized['lt][] + for<'a> + (OwnedStatic<T>) + where { + T: ?Sized + 'lt + } +} + +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynOwnedStatic<'lt, T>) + where { + T: ?Sized + 'static + } } /// Impl of [`TypeNameable`] for `'static` types that are borrowed (`&'lt T`). #[repr(transparent)] pub struct BorrowedStatic<'lt, T: ?Sized>(pub &'lt T); -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for BorrowedStatic<'lt, T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynBorrowedStatic['lt][T]: MaybeSized['lt][] + for<'a> + (BorrowedStatic<'lt, T>) + where { + T: ?Sized + 'lt, + } +} + +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynBorrowedStatic<'lt, T>) + where { + T: ?Sized + 'static + } } /// Impl of [`TypeNameable`] for `'static` types that are temporarily borrowed (`&'a T`). #[repr(transparent)] pub struct TempBorrowedStatic<'a, T: ?Sized>(pub &'a T); -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for TempBorrowedStatic<'a, T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynTempBorrowedStatic['lt][T]: MaybeSized['lt][] + for<'a> + (TempBorrowedStatic<'a, T>) + where { + T: ?Sized + 'lt, + } +} + +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynTempBorrowedStatic<'lt, T>) + where { + T: ?Sized + 'static + } } /// Impl of [`TypeNameable`] for `'static` types that are borrowed mutably (`&'lt mut T`). #[repr(transparent)] pub struct BorrowedMutStatic<'lt, T: ?Sized>(pub &'lt mut T); -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for BorrowedMutStatic<'lt, T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynBorrowedMutStatic['lt][T]: MaybeSized['lt][] + for<'a> + (BorrowedMutStatic<'lt, T>) + where { + T: ?Sized + 'lt, + } +} + +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynBorrowedMutStatic<'lt, T>) + where { + T: ?Sized + 'static + } } /// Impl of [`TypeNameable`] for `'static` types that are temporarily borrowed mutably (`&'a mut T`). #[repr(transparent)] pub struct TempBorrowedMutStatic<'a, T: ?Sized>(pub &'a mut T); -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for TempBorrowedMutStatic<'a, T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynTempBorrowedMutStatic['lt][T]: MaybeSized['lt][] + for<'a> + (TempBorrowedMutStatic<'a, T>) + where { + T: ?Sized + 'lt, + } +} + +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynTempBorrowedMutStatic<'lt, T>) + where { + T: ?Sized + 'static + } } /// Impl of [`TypeNameable`] for `'static` types that are in a [`Box`] (`Box<T>`). @@ -52,9 +118,23 @@ nameable! { pub struct BoxedStatic<T: ?Sized>(pub Box<T>); #[cfg(feature = "alloc")] -nameable! { - pub struct Name['a, 'lt, T]; - impl [T] for BoxedStatic<T> where { T: ?Sized + 'static } +bijective_higher_ranked_type! { + pub type DynBoxedStatic['lt][T]: MaybeSized['lt][] + for<'a> + (BoxedStatic<T>) + where { + T: ?Sized + 'lt, + } +} + +#[cfg(feature = "alloc")] +bijective_higher_ranked_type! { + pub type [][T][]: TypeName[][] + for<'lt> + (DynBoxedStatic<'lt, T>) + where { + T: ?Sized + 'static + } } #[derive(Debug)] |