Trait ZeroFrom
trait ZeroFrom<'zf, C: ?Sized>: 'zf
Trait for types that can be created from a reference to a different type C with no allocations,
i.e. a zero-copy (zero-alloc) version of "From"
A type can be the ZeroFrom target of multiple other types.
The intention is for ZeroFrom to produce a struct from a other with as little work as
possible. Although it is technically possible to implement ZeroFrom without being
zero-copy (using heap allocations), doing so defeats the purpose of ZeroFrom.
For example, impl ZeroFrom<C> for Cow<str> should return a Cow::Borrowed pointing at
data in the other type C, even if the other type is itself fully owned.
One can use the #[derive(ZeroFrom)] custom derive to automatically
implement this trait.
Examples
Implementing ZeroFrom on a custom data struct:
use Cow;
use ZeroFrom;
// Reference from a borrowed version of self
// Reference from a string slice directly
Required Methods
fn zero_from(other: &'zf C) -> SelfClone the other
Cinto a struct that may retain references intoC.
Implementors
impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 6]impl<'zf> ZeroFrom for Cow<'zf, str>impl<'a> ZeroFrom for u8impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 9]impl<'a> ZeroFrom for u64impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 12]impl<'zf, T: ?Sized> ZeroFrom for &'zf Timpl<'a> ZeroFrom for i8impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 15]impl<'a> ZeroFrom for i64impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>> ZeroFrom for (T1, T2, T3)impl<'a> ZeroFrom for charimpl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>, C6, T6: ZeroFrom<'zf, C6>> ZeroFrom for (T1, T2, T3, T4, T5, T6)impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 2]impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>, C6, T6: ZeroFrom<'zf, C6>, C7, T7: ZeroFrom<'zf, C7>, C8, T8: ZeroFrom<'zf, C8>, C9, T9: ZeroFrom<'zf, C9>> ZeroFrom for (T1, T2, T3, T4, T5, T6, T7, T8, T9)impl<'zf, T: ?Sized + 'zf> ZeroFrom for PhantomData<T>impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 5]impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 8]impl<'zf> ZeroFrom for &'zf strimpl<'a> ZeroFrom for u32impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 11]impl<'a> ZeroFrom for usizeimpl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 14]impl<'a> ZeroFrom for i32impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>> ZeroFrom for (T1, T2)impl<'a> ZeroFrom for isizeimpl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>> ZeroFrom for (T1, T2, T3, T4, T5)impl<'zf, B: ToOwned + ?Sized> ZeroFrom for Cow<'zf, B>impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 1]impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>, C6, T6: ZeroFrom<'zf, C6>, C7, T7: ZeroFrom<'zf, C7>, C8, T8: ZeroFrom<'zf, C8>> ZeroFrom for (T1, T2, T3, T4, T5, T6, T7, T8)impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 4]impl<'zf> ZeroFrom for Cow<'zf, str>impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 7]impl<'zf> ZeroFrom for &'zf strimpl<'a> ZeroFrom for u16impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 10]impl<'a> ZeroFrom for u128impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 13]impl<'zf, T> ZeroFrom for &'zf [T]impl<'a> ZeroFrom for i16impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 16]impl<'a> ZeroFrom for i128impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>> ZeroFrom for (T1, T2, T3, T4)impl<'zf, C, T: ZeroFrom<'zf, C>> ZeroFrom for Option<T>impl<'a> ZeroFrom for boolimpl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>, C6, T6: ZeroFrom<'zf, C6>, C7, T7: ZeroFrom<'zf, C7>> ZeroFrom for (T1, T2, T3, T4, T5, T6, T7)impl<'a, C, T: ZeroFrom<'a, C>> ZeroFrom for [T; 3]impl<'zf, C1, T1: ZeroFrom<'zf, C1>, C2, T2: ZeroFrom<'zf, C2>, C3, T3: ZeroFrom<'zf, C3>, C4, T4: ZeroFrom<'zf, C4>, C5, T5: ZeroFrom<'zf, C5>, C6, T6: ZeroFrom<'zf, C6>, C7, T7: ZeroFrom<'zf, C7>, C8, T8: ZeroFrom<'zf, C8>, C9, T9: ZeroFrom<'zf, C9>, C10, T10: ZeroFrom<'zf, C10>> ZeroFrom for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)