Diffstat (limited to 'src/any/static_wrapper.rs')
-rw-r--r--src/any/static_wrapper.rs116
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)]