Trait core_extensions::phantom::AsPhantomData
source · [−]pub trait AsPhantomData {
const PHANTOM: PhantomData<Self> = PhantomData;
const PHANTOM_COVARIANT: PhantomData<fn() -> Self> = PhantomData;
const PHANTOM_CONTRA: PhantomData<fn(_: Self)> = PhantomData;
const PHANTOM_INVARIANT: PhantomData<fn(_: Self) -> Self> = PhantomData;
fn as_phantom(&self) -> PhantomData<Self> { ... }
fn as_phantom_covariant(&self) -> PhantomData<fn() -> Self> { ... }
fn as_phantom_contra(&self) -> PhantomData<fn(_: Self)> { ... }
fn as_phantom_invariant(&self) -> PhantomData<fn(_: Self) -> Self> { ... }
}
Available on crate feature
phantom
only.Expand description
For getting a PhantomData<Self>
with a variety of lifetime variances.
Provided Associated Constants
sourceconst PHANTOM: PhantomData<Self> = PhantomData
const PHANTOM: PhantomData<Self> = PhantomData
Gets a PhantomData<Self>
.
Example
use core_extensions::AsPhantomData;
use std::marker::PhantomData;
fn get_default<T: Default>(_type: PhantomData<T>) -> T {
Default::default()
}
assert_eq!(get_default(String::PHANTOM), "");
assert_eq!(get_default(Vec::<()>::PHANTOM), vec![]);
sourceconst PHANTOM_COVARIANT: PhantomData<fn() -> Self> = PhantomData
const PHANTOM_COVARIANT: PhantomData<fn() -> Self> = PhantomData
Constructs a PhantomData<fn() -> T>
, a covariant PhantomData
.
Example
use core_extensions::{AsPhantomData, CovariantPhantom};
struct WithGhost<T> {
value: T,
_ghost: CovariantPhantom<T>,
}
impl<T> WithGhost<T> {
const fn new(value: T) -> Self {
Self {
value,
_ghost: T::PHANTOM_COVARIANT,
}
}
}
sourceconst PHANTOM_CONTRA: PhantomData<fn(_: Self)> = PhantomData
const PHANTOM_CONTRA: PhantomData<fn(_: Self)> = PhantomData
Gets a PhantomData<fn(Self)>
, a contravariant PhantomData
.
Example
use core_extensions::{AsPhantomData, ContraVariantPhantom};
struct WithGhost<T> {
value: T,
_ghost: ContraVariantPhantom<T>,
}
impl<T> WithGhost<T> {
const fn new(value: T) -> Self {
Self {
value,
_ghost: T::PHANTOM_CONTRA,
}
}
}
sourceconst PHANTOM_INVARIANT: PhantomData<fn(_: Self) -> Self> = PhantomData
const PHANTOM_INVARIANT: PhantomData<fn(_: Self) -> Self> = PhantomData
Gets a PhantomData<fn(Self) -> Self>
, an invariant PhantomData
.
Example
use core_extensions::{AsPhantomData, InvariantPhantom};
struct WithGhost<T> {
value: T,
_ghost: InvariantPhantom<T>,
}
impl<T> WithGhost<T> {
const fn new(value: T) -> Self {
Self {
value,
_ghost: T::PHANTOM_INVARIANT,
}
}
}
Provided Methods
sourcefn as_phantom(&self) -> PhantomData<Self>
fn as_phantom(&self) -> PhantomData<Self>
Gets a PhantomData<Self>
.
Example
use core_extensions::AsPhantomData;
use std::marker::PhantomData;
fn get_default<T: Default>(_type: PhantomData<T>) -> T {
Default::default()
}
let string = String::new();
let vector = vec![0u8];
assert_eq!(get_default(string.as_phantom()), "");
assert_eq!(get_default(vector.as_phantom()), vec![]);
sourcefn as_phantom_covariant(&self) -> PhantomData<fn() -> Self>
fn as_phantom_covariant(&self) -> PhantomData<fn() -> Self>
Gets a PhantomData<fn() -> Self>
, a covariant PhantomData
.
sourcefn as_phantom_contra(&self) -> PhantomData<fn(_: Self)>
fn as_phantom_contra(&self) -> PhantomData<fn(_: Self)>
Gets a PhantomData<fn(Self)>
, a contravariant PhantomData
.
sourcefn as_phantom_invariant(&self) -> PhantomData<fn(_: Self) -> Self>
fn as_phantom_invariant(&self) -> PhantomData<fn(_: Self) -> Self>
Gets a PhantomData<fn(Self) -> Self>
, an invariant PhantomData
.