Trait GetField

Source
pub trait GetField<FieldName>: FieldType<FieldName> {
    // Required method
    fn get_field_(&self, field_name: FieldName) -> &Self::Ty;
}
Expand description

Provides shared access to the FieldName field.

FieldName is expected to be a TStr.

§Safety

While this trait is not unsafe, implementors ought not mutate fields inside accessor trait impls.

Mutating fields is only advisable if those fields don’t have field accessor impls.

§Usage as Bound Example

use structural::{StructuralExt,GetField,FP,fp};

fn example(this:impl GetField<FP!(0), Ty=u32> + GetField<FP!(1), Ty=&'static str>){
    assert_eq!( this.field_(fp!(0)), &99 );
    assert_eq!( this.field_(fp!(1)), &"world" );

    assert_eq!( this.fields(fp!(0,1)), (&99, &"world") );
    assert_eq!( this.cloned_fields(fp!(0,1)), (99, "world") );
}

example((99,"world",));
example((99,"world",100,101,102,));

§Manual Implementation Example

While this trait is intended to be implemented using the Structural derive macro, you can manually implement it like this:

use structural::{FieldType,GetField,Structural,FP};

struct Huh<T>{
    value:T,
}

impl<T> Structural for Huh<T>{}


impl<T> FieldType<FP!(value)> for Huh<T>{
    type Ty=T;
}

impl<T> GetField<FP!(value)> for Huh<T>{
    fn get_field_(&self,_:FP!(value))->&Self::Ty{
        &self.value
    }
}

Required Methods§

Source

fn get_field_(&self, field_name: FieldName) -> &Self::Ty

Accesses the FieldName field by reference.

Implementations on Foreign Types§

Source§

impl<'a, T, __F, __Ty> GetField<__F> for &'a T
where T: GetField<__F, Ty = __Ty> + ?Sized,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<'a, T, __F, __Ty> GetField<__F> for &'a mut T
where T: GetField<__F, Ty = __Ty> + ?Sized + 'a,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<P, __F, __Ty> GetField<__F> for Pin<P>
where P::Target: GetField<__F, Ty = __Ty> + Sized, P: Deref,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<T, P> GetField<P> for [T; 0]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 1]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 2]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 3]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 4]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 5]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 6]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 7]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 8]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 9]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 10]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 11]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 12]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 13]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 14]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 15]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 16]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 17]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 18]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 19]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 20]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 21]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 22]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 23]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 24]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 25]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 26]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 27]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 28]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 29]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 30]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 31]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, P> GetField<P> for [T; 32]
where P: IsPathForArray<Self>,

Source§

fn get_field_(&self, _: P) -> &Self::Ty

Source§

impl<T, __F, __Ty> GetField<__F> for Box<T>
where T: GetField<__F, Ty = __Ty> + ?Sized,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<T, __F, __Ty> GetField<__F> for Rc<T>
where T: GetField<__F, Ty = __Ty> + ?Sized,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<T, __F, __Ty> GetField<__F> for Arc<T>
where T: GetField<__F, Ty = __Ty> + ?Sized,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Source§

impl<T, __F, __Ty> GetField<__F> for ManuallyDrop<T>
where T: GetField<__F, Ty = __Ty>,

Source§

fn get_field_(&self, fname: __F) -> &__Ty

Implementors§

Source§

impl<T, V, F> GetField<F> for VariantProxy<T, V>
where T: ?Sized + GetVariantField<V, F>, V: IsTStr,

Source§

impl<T, __F, __Ty> GetField<__F> for FieldCloner<T>
where T: GetField<__F, Ty = __Ty>,

Source§

impl<T, __F, __Ty> GetField<__F> for StrucWrapper<T>
where T: GetField<__F, Ty = __Ty>,