Lower

Trait Lower 

Source
pub unsafe trait Lower<'a> {
    type Target: Lower<'a, Target = Self::Target> + ?Sized + 'a;

    // Provided method
    fn lower_ref<'b>(&'b self) -> &'b Self::Target
       where Self: 'a,
             'a: 'b { ... }
}
Expand description

Indicates that a type covariantly references a set of lifetime parameters, and when these parameters are all replaced with 'a, the resulting type is Target. Consequentially, if the type outlives 'a, it can be directly coerced to Target by applying covariance.

This trait can be trivially implemented for any type by setting Target to be Self. However, in order to maximize its usefulness, it should operate on as many lifetime parameters as possible.

This trait can be automatically derived. When deriving on a type with no lifetime parameters, the trivial implementation will be used (i.e. Target = Self). Otherwise, it will operate on the first lifetime parameter in the generic parameters list. Deriving will fail if the type is not covariant in this parameter.

§Safety

The implementor is responsible for ensuring that for all 'a where T: 'a, <T as Lower<'a>>::Target is a subtype of T.

Required Associated Types§

Source

type Target: Lower<'a, Target = Self::Target> + ?Sized + 'a

The type resulting from substituting the covariant lifetime parameters in Self for 'a.

Provided Methods§

Source

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Applies convariance in order to shorten the internal lifetime parameters in a reference.

Implementations on Foreign Types§

Source§

impl<'a> Lower<'a> for bool

Source§

type Target = bool

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for char

Source§

type Target = char

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for f32

Source§

type Target = f32

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for f64

Source§

type Target = f64

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for i8

Source§

type Target = i8

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for i16

Source§

type Target = i16

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for i32

Source§

type Target = i32

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for i64

Source§

type Target = i64

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for i128

Source§

type Target = i128

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for isize

Source§

type Target = isize

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for str

Source§

type Target = str

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for u8

Source§

type Target = u8

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for u16

Source§

type Target = u16

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for u32

Source§

type Target = u32

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for u64

Source§

type Target = u64

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for u128

Source§

type Target = u128

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for ()

Source§

type Target = ()

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for usize

Source§

type Target = usize

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for CString

Source§

type Target = CString

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for String

Source§

type Target = String

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for CStr

Source§

type Target = CStr

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicI8

Source§

type Target = AtomicI8

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicI16

Source§

type Target = AtomicI16

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicI32

Source§

type Target = AtomicI32

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicI64

Source§

type Target = AtomicI64

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicIsize

Source§

type Target = AtomicIsize

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicU8

Source§

type Target = AtomicU8

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicU16

Source§

type Target = AtomicU16

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicU32

Source§

type Target = AtomicU32

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicU64

Source§

type Target = AtomicU64

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for AtomicUsize

Source§

type Target = AtomicUsize

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for OsStr

Source§

type Target = OsStr

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for OsString

Source§

type Target = OsString

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroI8

Source§

type Target = NonZero<i8>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroI16

Source§

type Target = NonZero<i16>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroI32

Source§

type Target = NonZero<i32>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroI64

Source§

type Target = NonZero<i64>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroI128

Source§

type Target = NonZero<i128>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroIsize

Source§

type Target = NonZero<isize>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroU8

Source§

type Target = NonZero<u8>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroU16

Source§

type Target = NonZero<u16>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroU32

Source§

type Target = NonZero<u32>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroU64

Source§

type Target = NonZero<u64>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroU128

Source§

type Target = NonZero<u128>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a> Lower<'a> for NonZeroUsize

Source§

type Target = NonZero<usize>

Source§

fn lower_ref<'b>(&'b self) -> &'b Self::Target
where Self: 'a, 'a: 'b,

Source§

impl<'a, 'b, T: 'b + ?Sized> Lower<'b> for &'a mut T

Source§

type Target = &'b mut T

Source§

fn lower_ref<'c>(&'c self) -> &'c Self::Target
where 'a: 'b, 'b: 'c,

Source§

impl<'a, 'b, T: Lower<'b> + ?Sized> Lower<'b> for &'a T

Source§

type Target = &'b <T as Lower<'b>>::Target

Source§

impl<'a, 'b, T: Lower<'b>> Lower<'b> for Iter<'a, T>
where <T as Lower<'b>>::Target: Sized,

Source§

type Target = Iter<'b, <T as Lower<'b>>::Target>

Source§

impl<'a, A: Lower<'a>, B: Lower<'a> + ?Sized> Lower<'a> for (A, B)
where <A as Lower<'a>>::Target: Sized,

Source§

type Target = (<A as Lower<'a>>::Target, <B as Lower<'a>>::Target)

Source§

impl<'a, A: Lower<'a>, B: Lower<'a>, C: Lower<'a> + ?Sized> Lower<'a> for (A, B, C)
where <A as Lower<'a>>::Target: Sized, <B as Lower<'a>>::Target: Sized,

Source§

type Target = (<A as Lower<'a>>::Target, <B as Lower<'a>>::Target, <C as Lower<'a>>::Target)

Source§

impl<'a, A: Lower<'a>, B: Lower<'a>, C: Lower<'a>, D: Lower<'a> + ?Sized> Lower<'a> for (A, B, C, D)
where <A as Lower<'a>>::Target: Sized, <B as Lower<'a>>::Target: Sized, <C as Lower<'a>>::Target: Sized,

Source§

type Target = (<A as Lower<'a>>::Target, <B as Lower<'a>>::Target, <C as Lower<'a>>::Target, <D as Lower<'a>>::Target)

Source§

impl<'a, I: Lower<'a>> Lower<'a> for Copied<I>
where <I as Lower<'a>>::Target: Sized,

Source§

type Target = Copied<<I as Lower<'a>>::Target>

Source§

impl<'a, T: Lower<'a> + ?Sized> Lower<'a> for Box<T>

Source§

type Target = Box<<T as Lower<'a>>::Target>

Source§

impl<'a, T: Lower<'a>> Lower<'a> for [T]
where <T as Lower<'a>>::Target: Sized,

Source§

type Target = [<T as Lower<'a>>::Target]

Source§

impl<'a, T: Lower<'a>, const N: usize> Lower<'a> for [T; N]
where <T as Lower<'a>>::Target: Sized,

Source§

type Target = [<T as Lower<'a>>::Target; N]

Implementors§

Source§

impl<'a, 'b, T: 'a + 'b> Lower<'b> for Lowered<'a, T>

Source§

type Target = Lowered<'b, T>

Source§

impl<'a, T: Lower<'a>> Lower<'a> for Fortify<T>
where T::Target: Sized,

Source§

type Target = Fortify<<T as Lower<'a>>::Target>