//! Wrapper types that impl [`TypeNameable`] when their generic type is `'static`.
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);
// bijective_higher_ranked_type! {
// pub type DynOwnedStatic['lt][T][]: MaybeSized['lt][]
// for<'a>
// (OwnedStatic<T>)
// where {
// T: ?Sized + 'lt
// }
// }
pub struct DynOwnedStatic<T: ?Sized>(PhantomData<fn() -> *const T>);
impl<'a, 'lt, T: ?Sized + 'lt> MaybeSized::LowerForLt<'a, 'lt, &'a (&'lt (),)>
for DynOwnedStatic<T>
{
type T = OwnedStatic<T>;
}
impl<'a, 'lt, T: ?Sized + 'lt> MaybeSized::RaiseForLt<'a, 'lt, &'a (&'lt (),)> for OwnedStatic<T> {
type HigherRanked = DynOwnedStatic<T>;
}
bijective_higher_ranked_type! {
pub type [][T][]: TypeName[][]
for<'lt>
(DynOwnedStatic<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);
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);
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);
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);
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>`).
#[cfg(feature = "alloc")]
pub struct BoxedStatic<T: ?Sized>(pub Box<T>);
#[cfg(feature = "alloc")]
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)]
pub enum BorrowedStaticValue<'ctx, T: ?Sized + 'static> {
Ctx(&'ctx T),
Static(&'static T),
}
#[derive(Debug)]
pub enum BorrowedMutStaticValue<'ctx, T: ?Sized + 'static> {
Ctx(&'ctx mut T),
Static(&'static mut T),
}