[][src]Struct partial_ref::Nested

pub struct Nested<Outer, Inner>(_, _);

A nested part.

A nested part can be constructed from an outer part and an inner part. The outer part must be a Field part, and the field's type must be a PartialRefTarget having the the inner part (HasPart).

When nesting multiple times, the nested part should always be the outer part. This isn't enforced, but some operations are only supported in that case.

Trait Implementations

impl<Outer, OuterFieldType, Inner> Part for Nested<Outer, Inner> where
    Outer: Part<PartType = Field<OuterFieldType>>,
    Inner: Part,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<Inner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>, 
[src]

A nested part is itself a part.

type PartType = Inner::PartType

impl<Reference, Outer, OuterFieldType, Inner> HasPart<Nested<Outer, Inner>> for Reference where
    Reference: ?Sized,
    Reference: HasPart<Outer>,
    Outer: Part<PartType = Field<OuterFieldType>>,
    Inner: Part,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<Inner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>, 
[src]

A reference has a nested part if it has the outer part and the nested part is valid.

impl<'a, ContainingPart, PluckedOuter, PluckedInner, Reference, NestedPartIndex, Index, OuterFieldType, ContainingFieldType> PluckConst<'a, Nested<PluckedOuter, PluckedInner>, IndexSplit<NestedPartIndex, Index>> for Mut<ContainingPart, Reference> where
    PluckedOuter: Part<PartType = Field<OuterFieldType>>,
    PluckedInner: Part,
    ContainingPart: Part<PartType = Field<ContainingFieldType>>,
    ContainingFieldType: SplitIntoParts<'a, ContainingPart, Reference>,
    ContainingFieldType: ?Sized,
    ContainingFieldType::ResultMut: PluckConst<'a, Nested<PluckedOuter, PluckedInner>, Index>,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<PluckedInner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>,
    Reference: PartialRef<'a>,
    Reference::Target: HasPart<ContainingPart>,
    ContainingPart: ContainsNestedPart<PluckedOuter, NestedPartIndex>, 
[src]

(internal) Pluck a constant nested subpart of the mutable first part.

This leaves all other subparts as mutable in the remaining reference.

type Remainder = <ContainingFieldType::ResultMut as PluckConst<'a, Nested<PluckedOuter, PluckedInner>, Index>>::Remainder

The partial reference left after plucking.

impl<'a, ContainingPart, PluckedOuter, PluckedInner, Reference, NestedPartIndex, Index, OuterFieldType, ContainingFieldType> PluckConst<'a, Nested<PluckedOuter, PluckedInner>, IndexSplit<NestedPartIndex, Index>> for Const<ContainingPart, Reference> where
    PluckedOuter: Part<PartType = Field<OuterFieldType>>,
    PluckedInner: Part,
    ContainingPart: Part<PartType = Field<ContainingFieldType>>,
    ContainingFieldType: SplitIntoParts<'a, ContainingPart, Reference>,
    ContainingFieldType: ?Sized,
    ContainingFieldType::ResultMut: PluckConst<'a, Nested<PluckedOuter, PluckedInner>, Index>,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<PluckedInner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>,
    Reference: PartialRef<'a>,
    Reference::Target: HasPart<ContainingPart>,
    ContainingPart: ContainsNestedPart<PluckedOuter, NestedPartIndex>, 
[src]

(internal) Pluck a constant nested subpart of the constant first part.

type Remainder = Const<ContainingPart, Reference>

The partial reference left after plucking.

impl<'a, ContainingPart, PluckedOuter, PluckedInner, Reference, NestedPartIndex, Index, OuterFieldType, ContainingFieldType> PluckMut<'a, Nested<PluckedOuter, PluckedInner>, IndexSplit<NestedPartIndex, Index>> for Mut<ContainingPart, Reference> where
    PluckedOuter: Part<PartType = Field<OuterFieldType>>,
    PluckedInner: Part,
    ContainingPart: Part<PartType = Field<ContainingFieldType>>,
    ContainingFieldType: SplitIntoParts<'a, ContainingPart, Reference>,
    ContainingFieldType: ?Sized,
    ContainingFieldType::ResultMut: PluckMut<'a, Nested<PluckedOuter, PluckedInner>, Index>,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<PluckedInner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>,
    Reference: PartialRef<'a>,
    Reference::Target: HasPart<ContainingPart>,
    ContainingPart: ContainsNestedPart<PluckedOuter, NestedPartIndex>, 
[src]

(internal) Pluck a mutable nested subpart of the mutable first part.

This leaves all other subparts in the remaining reference.

type Remainder = <ContainingFieldType::ResultMut as PluckMut<'a, Nested<PluckedOuter, PluckedInner>, Index>>::Remainder

The partial reference left after plucking.

impl<NestedPart, Outer, Inner, OuterFieldType, Index> ContainsNestedPart<Nested<Outer, Inner>, IndexNext<Index>> for NestedPart where
    NestedPart: Part,
    Inner: Part,
    NestedPart: ContainsNestedPart<Outer, Index>,
    Outer: Part<PartType = Field<OuterFieldType>>,
    OuterFieldType: ?Sized,
    OuterFieldType: HasPart<Inner>,
    OuterFieldType: PartialRefTarget<RawTarget = OuterFieldType>, 
[src]

(internal) A part contains a nested part if it contains the outer part of the nested part.

impl<Outer: Default, Inner: Default> Default for Nested<Outer, Inner>[src]

impl<NewInnerPart: Part, Outer: Part, Inner: Part> BitOr<NewInnerPart> for Nested<Outer, Inner>[src]

Create default values for nested parts.

These are useful as parameters to pass to PartialRef's part functions.

type Output = Nested<Nested<Outer, Inner>, NewInnerPart>

The resulting type after applying the | operator.

Auto Trait Implementations

impl<Outer, Inner> Send for Nested<Outer, Inner> where
    Inner: Send,
    Outer: Send

impl<Outer, Inner> Sync for Nested<Outer, Inner> where
    Inner: Sync,
    Outer: Sync

Blanket Implementations

impl<Reference, Outer, OuterFieldType, Inner> HasPart for Reference where
    Inner: Part,
    Outer: Part<PartType = Field<OuterFieldType>>,
    OuterFieldType: HasPart<Inner, RawTarget = OuterFieldType> + PartialRefTarget + ?Sized,
    Reference: HasPart<Outer> + ?Sized
[src]

impl<NestedPart> ContainsNestedPart for NestedPart where
    NestedPart: Part
[src]

impl<NestedPart, Outer, Inner, OuterFieldType, Index> ContainsNestedPart for NestedPart where
    Inner: Part,
    NestedPart: Part + ContainsNestedPart<Outer, Index>,
    Outer: Part<PartType = Field<OuterFieldType>>,
    OuterFieldType: HasPart<Inner, RawTarget = OuterFieldType> + PartialRefTarget + ?Sized
[src]

impl<T> From for T[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.