pub trait Witness<A>: AsRef<A> + Sized + Sealed {
// Required methods
fn new(addr: A) -> Option<Self>;
unsafe fn new_unchecked(addr: A) -> Self;
fn into_addr(self) -> A;
// Provided methods
fn from_witness<W: Witness<A>>(addr: W) -> Option<Self> { ... }
fn get(&self) -> A
where A: Copy { ... }
fn transpose<T>(self) -> A::Map<Self::Map<T>>
where Self: TransposableWitness<A>,
A: TransposableWitness<T>,
Self::Map<T>: Witness<T>,
A::Map<Self::Map<T>>: Witness<Self::Map<T>> { ... }
}
Expand description
A type which is a witness to some property about an address.
A type which implements Witness<A>
wraps an address of type A
and
guarantees some property about the wrapped address. It is implemented by
SpecifiedAddr
, UnicastAddr
, MulticastAddr
, LinkLocalAddr
,
and NonMappedAddr
.
Required Methods§
sourcefn new(addr: A) -> Option<Self>
fn new(addr: A) -> Option<Self>
Constructs a new witness type.
new
returns None
if addr
does not satisfy the property guaranteed
by Self
.
sourceunsafe fn new_unchecked(addr: A) -> Self
unsafe fn new_unchecked(addr: A) -> Self
Constructs a new witness type without checking to see if addr
actually
satisfies the required property.
§Safety
It is up to the caller to make sure that addr
satisfies the required
property in order to avoid breaking the guarantees of this trait.
sourcefn into_addr(self) -> A
fn into_addr(self) -> A
Consumes this witness and returns the contained A
.
If A: Copy
, prefer get
instead of into_addr
. get
is idiomatic
for wrapper types which which wrap Copy
types (e.g., see
NonZeroUsize::get
or Cell::get
). into_xxx
methods are
idiomatic only when self
must be consumed by value because the wrapped
value is not Copy
(e.g., see Cell::into_inner
).
Provided Methods§
sourcefn from_witness<W: Witness<A>>(addr: W) -> Option<Self>
fn from_witness<W: Witness<A>>(addr: W) -> Option<Self>
Constructs a new witness type from an existing witness type.
from_witness(witness)
is equivalent to new(witness.into_addr())
.
sourcefn transpose<T>(self) -> A::Map<Self::Map<T>>where
Self: TransposableWitness<A>,
A: TransposableWitness<T>,
Self::Map<T>: Witness<T>,
A::Map<Self::Map<T>>: Witness<Self::Map<T>>,
fn transpose<T>(self) -> A::Map<Self::Map<T>>where
Self: TransposableWitness<A>,
A: TransposableWitness<T>,
Self::Map<T>: Witness<T>,
A::Map<Self::Map<T>>: Witness<Self::Map<T>>,
Transposes this witness type with another witness type layered inside of
it.
(e.g. UnicastAddr<SpecifiedAddr