pub struct MovedOutFields(/* private fields */);Expand description
Which fields have been moved out of a value.
This is used to implement converting a value into multiple fields by value.
§Example
This is a toy example,
for more realistic examples,you can look
at
the manual implementation example of IntoField
,or
the manual implementation example of IntoVariantField
.
use structural::field::{MovedOutFields, FieldBit};
// This is how `FieldBit` is constructed in the derive macro.
const FIELD_A_BIT: FieldBit= FieldBit::new(0);
const FIELD_B_BIT: FieldBit= FieldBit::new(1);
let mut moved = MovedOutFields::new();
// A `MovedOutFields` considers no field moved when constructed.
assert!( !moved.is_moved_out(FIELD_A_BIT) );
assert!( !moved.is_moved_out(FIELD_B_BIT) );
// `set_moved_out` is called in the
// `IntoField::move_out_field_`/`IntoVariantField::move_out_vfield_` implementation.
moved.set_moved_out(FIELD_A_BIT);
moved.set_moved_out(FIELD_B_BIT);
// `is_moved_out` is called in the `DropFields::drop_fields` implementation,
//
// If `is_moved_out` returns false, then a field has not been moved out,
// and must be dropped.
assert!( moved.is_moved_out(FIELD_A_BIT) );
assert!( moved.is_moved_out(FIELD_B_BIT) );
Implementations§
Source§impl MovedOutFields
impl MovedOutFields
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Constructs a MovedOutFields where no field is considered moved out yet.
Sourcepub fn set_moved_out(&mut self, bit: FieldBit)
pub fn set_moved_out(&mut self, bit: FieldBit)
Marks a field as being moved out.
Sourcepub const fn is_moved_out(&self, bit: FieldBit) -> bool
pub const fn is_moved_out(&self, bit: FieldBit) -> bool
Checks whether a field has been moved out.
Trait Implementations§
Source§impl Clone for MovedOutFields
impl Clone for MovedOutFields
Source§fn clone(&self) -> MovedOutFields
fn clone(&self) -> MovedOutFields
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for MovedOutFields
Auto Trait Implementations§
impl Freeze for MovedOutFields
impl RefUnwindSafe for MovedOutFields
impl Send for MovedOutFields
impl Sync for MovedOutFields
impl Unpin for MovedOutFields
impl UnsafeUnpin for MovedOutFields
impl UnwindSafe for MovedOutFields
Blanket Implementations§
impl<This, T> Array0<T> for Thiswhere
This: ?Sized,
impl<This, V, T> Array0Variant<T, V> for Thiswhere
This: ?Sized,
impl<This, T> ArrayMove0<T> for Thiswhere
This: ?Sized,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<This> EnumExt for Thiswhere
This: ?Sized,
impl<This> EnumExt for Thiswhere
This: ?Sized,
Source§fn as_variant<V>(
&self,
vari: TStr<V>,
) -> Result<&VariantProxy<Self, TStr<V>>, &Self>
fn as_variant<V>( &self, vari: TStr<V>, ) -> Result<&VariantProxy<Self, TStr<V>>, &Self>
Fallibly converts a reference to an enum into
a reference of a VariantProxy of some variant. Read more
Source§fn as_mut_variant<V>(
&mut self,
vari: TStr<V>,
) -> Result<&mut VariantProxy<Self, TStr<V>>, &mut Self>
fn as_mut_variant<V>( &mut self, vari: TStr<V>, ) -> Result<&mut VariantProxy<Self, TStr<V>>, &mut Self>
Fallibly converts a mutable reference to an enum into
a mutable reference of a VariantProxy of some variant. Read more
Source§impl<This, T> IntoStructural<T> for Thiswhere
T: FromStructural<This>,
impl<This, T> IntoStructural<T> for Thiswhere
T: FromStructural<This>,
Source§fn into_structural(self) -> T
fn into_structural(self) -> T
Performs the conversion
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§const T: PhantomData<fn() -> Self> = PhantomData
const T: PhantomData<fn() -> Self> = PhantomData
Represents Self by using a VariantPhantom,
using the syntax
Type::T to pass it in methods with _:VariantPhantom<T> parameters. Read moreSource§const T_D: PhantomData<Self> = PhantomData
const T_D: PhantomData<Self> = PhantomData
Represents Self by using a VariantDropPhantom,for specialized cases. Read more
Source§fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Selfwhere
Self: Sized,
fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Selfwhere
Self: Sized,
Asserts that
other is the same type as self.Source§fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Selfwhere
Self: Sized,
fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Selfwhere
Self: Sized,
Asserts that
other is the same type as self.Source§fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Selfwhere
Self: Sized,
fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Selfwhere
Self: Sized,
Asserts that
other is the same type as self.Source§fn ty_(&self) -> PhantomData<fn() -> Self>
fn ty_(&self) -> PhantomData<fn() -> Self>
Equivalent to SelfOps::T,as a method. Read more
Source§fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
Equivalent to Self::ty_ with an invariant type.
Source§fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
Equivalent to Self::ty_ with an invariant lifetime.
Source§fn eq_id(&self, other: &Self) -> bool
fn eq_id(&self, other: &Self) -> bool
Identity comparison to another value of the same type. Read more
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Emulates the pipeline operator,allowing method syntax in more places. Read more
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
The same as
piped except that the function takes &Self
Useful for functions that take &Self instead of Self. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
The same as
piped except that the function takes &mut Self.
Useful for functions that take &mut Self instead of Self.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Mutates self using a closure taking self by mutable reference,
passing it along the method chain. Read more
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Observes the value of self passing it along unmodified.
Useful in a long method chain. Read more
Source§fn into_<T>(self, _: PhantomData<fn() -> T>) -> Twhere
Self: Into<T>,
fn into_<T>(self, _: PhantomData<fn() -> T>) -> Twhere
Self: Into<T>,
Performs a conversion using Into. Read more
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
Performs a reference to reference conversion using AsRef,
using the turbofish
.as_ref_::<_>() syntax. Read moreSource§impl<T> StructuralExt for Twhere
T: ?Sized,
impl<T> StructuralExt for Twhere
T: ?Sized,
Source§fn field_<'a, P>(
&'a self,
path: P,
) -> NormalizeFieldsOut<Result<&'a P::Ty, P::Err>>
fn field_<'a, P>( &'a self, path: P, ) -> NormalizeFieldsOut<Result<&'a P::Ty, P::Err>>
Gets a reference to a field,determined by
path. Read moreSource§fn fields<'a, P>(&'a self, path: P) -> RevGetMultiFieldOut<'a, P, Self>where
P: RevGetMultiField<'a, Self>,
fn fields<'a, P>(&'a self, path: P) -> RevGetMultiFieldOut<'a, P, Self>where
P: RevGetMultiField<'a, Self>,
Gets references to multiple fields,determined by
path. Read moreSource§fn cloned_fields<'a, P>(
&'a self,
path: P,
) -> ClonedOut<RevGetMultiFieldOut<'a, P, Self>>
fn cloned_fields<'a, P>( &'a self, path: P, ) -> ClonedOut<RevGetMultiFieldOut<'a, P, Self>>
Gets clones of multiple fields,determined by
path. Read moreSource§fn field_mut<'a, P>(
&'a mut self,
path: P,
) -> NormalizeFieldsOut<Result<&'a mut P::Ty, P::Err>>
fn field_mut<'a, P>( &'a mut self, path: P, ) -> NormalizeFieldsOut<Result<&'a mut P::Ty, P::Err>>
Gets a mutable reference to a field,determined by
path. Read moreSource§fn fields_mut<'a, P>(
&'a mut self,
path: P,
) -> RevGetMultiFieldMutOut<'a, P, Self>where
P: RevGetMultiFieldMut<'a, Self>,
fn fields_mut<'a, P>(
&'a mut self,
path: P,
) -> RevGetMultiFieldMutOut<'a, P, Self>where
P: RevGetMultiFieldMut<'a, Self>,
Gets mutable references to multiple fields,determined by
path. Read moreSource§fn into_field<P>(self, path: P) -> NormalizeFieldsOut<Result<P::Ty, P::Err>>
fn into_field<P>(self, path: P) -> NormalizeFieldsOut<Result<P::Ty, P::Err>>
Converts ´self´ into a field,determined by
path. Read moreSource§fn into_fields<P>(self, path: P) -> RevIntoMultiFieldOut<P, Self>where
P: RevIntoMultiField<Self>,
Self: Sized,
fn into_fields<P>(self, path: P) -> RevIntoMultiFieldOut<P, Self>where
P: RevIntoMultiField<Self>,
Self: Sized,
Converts
self into multiple fields by value. Read moreSource§fn is_variant<P>(&self, _path: P) -> bool
fn is_variant<P>(&self, _path: P) -> bool
Checks whether an enum is a particular variant. Read more
Source§fn into_struc<U>(self) -> Uwhere
Self: IntoStructural<U>,
fn into_struc<U>(self) -> Uwhere
Self: IntoStructural<U>,
Converts this into another structural type using
IntoStructural. Read moreSource§fn try_into_struc<U>(self) -> Result<U, TryFromError<Self, Self::Error>>where
Self: TryIntoStructural<U>,
fn try_into_struc<U>(self) -> Result<U, TryFromError<Self, Self::Error>>where
Self: TryIntoStructural<U>,
Performs a fallible conversion into another structural type using
TryIntoStructural. Read moreSource§impl<This, T> TryIntoStructural<T> for Thiswhere
T: TryFromStructural<This>,
impl<This, T> TryIntoStructural<T> for Thiswhere
T: TryFromStructural<This>,
Source§type Error = <T as TryFromStructural<This>>::Error
type Error = <T as TryFromStructural<This>>::Error
The error parameter of
TryFromError,
returned from try_into_structural on conversion error.Source§fn try_into_structural(
self,
) -> Result<T, TryFromError<This, <This as TryIntoStructural<T>>::Error>>
fn try_into_structural( self, ) -> Result<T, TryFromError<This, <This as TryIntoStructural<T>>::Error>>
Performs the conversion
Source§impl<T> TypeIdentity for Twhere
T: ?Sized,
impl<T> TypeIdentity for Twhere
T: ?Sized,
Source§fn into_type_val(self) -> Self::Type
fn into_type_val(self) -> Self::Type
Converts a value back to the original type.
Source§fn into_type_ref(&self) -> &Self::Type
fn into_type_ref(&self) -> &Self::Type
Converts a reference back to the original type.
Source§fn into_type_mut(&mut self) -> &mut Self::Type
fn into_type_mut(&mut self) -> &mut Self::Type
Converts a mutable reference back to the original type.
Source§fn into_type_box(self: Box<Self>) -> Box<Self::Type>
fn into_type_box(self: Box<Self>) -> Box<Self::Type>
Converts a box back to the original type.
Source§fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
Converts an Arc back to the original type.
Source§fn from_type_val(this: Self::Type) -> Self
fn from_type_val(this: Self::Type) -> Self
Converts a value back to the original type.
Source§fn from_type_ref(this: &Self::Type) -> &Self
fn from_type_ref(this: &Self::Type) -> &Self
Converts a reference back to the original type.
Source§fn from_type_mut(this: &mut Self::Type) -> &mut Self
fn from_type_mut(this: &mut Self::Type) -> &mut Self
Converts a mutable reference back to the original type.
Source§fn from_type_box(this: Box<Self::Type>) -> Box<Self>
fn from_type_box(this: Box<Self::Type>) -> Box<Self>
Converts a box back to the original type.