Struct partial_ref::Nested
source · pub struct Nested<Outer, Inner>(_, _);
Expand description
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
sourceimpl<NewInnerPart: Part, Outer: Part, Inner: Part> BitOr<NewInnerPart> for Nested<Outer, Inner>
impl<NewInnerPart: Part, Outer: Part, Inner: Part> BitOr<NewInnerPart> for Nested<Outer, Inner>
Create default values for nested parts.
These are useful as parameters to pass to PartialRef
’s part functions.
sourceimpl<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>,
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>,
A nested part is itself a part.
sourceimpl<'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>,
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>,
(internal) Pluck a constant nested subpart of the constant first part.
sourceimpl<'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>,
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>,
(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 as SplitIntoParts<'a, ContainingPart, Reference>>::ResultMut as PluckConst<'a, Nested<PluckedOuter, PluckedInner>, Index>>::Remainder
type Remainder = <<ContainingFieldType as SplitIntoParts<'a, ContainingPart, Reference>>::ResultMut as PluckConst<'a, Nested<PluckedOuter, PluckedInner>, Index>>::Remainder
sourceimpl<'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>,
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>,
(internal) Pluck a mutable nested subpart of the mutable first part.
This leaves all other subparts in the remaining reference.