[][src]Trait structural::field_traits::GetField

pub trait GetField<FieldName>: StructuralDyn {
    type Ty;
    fn get_field_(&self) -> &Self::Ty;
}

Allows accessing the FieldName field.

FieldName represents the name of the field on the type level, It is a type because a FIELD_NAME:&'static str const parameter was neither stable nor worked in nightly at the time this was defined.

Usage as Bound Example

This example demonstrates how you can use this trait as a bound.

If you have a lot of field accessor bounds you could use structural_alias macro to alias those bounds and use that alias instead.

use structural::{GetField,GetFieldExt,TI,ti};
 
fn formatted_value<T,S>(this:&T)->String
where
    T:GetField<TI!(v a l u e), Ty=S>,
    S:std::fmt::Debug,
{
    format!("{:#?}",this.field_(ti!(value)) )
}

#[derive(structural::Structural)]
struct Huh<T>{
    #[struc(access="mut")]
    value:T,
}
 
fn main(){
    let this=Huh{value:"Hello, World!"};
    assert!( formatted_value(&this).contains("Hello, World!") );
}

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::{
    GetField,Structural,TI,TList,
    structural_trait::{FieldInfo,TField},
    impl_structural_dyn,
};

struct Huh<T>{
    value:T,
}

impl<T> Structural for Huh<T>{
    const FIELDS:&'static[FieldInfo]=&[FieldInfo::not_renamed("value")];
     
    type Fields=TList![ TField<TI!(v a l u e),T> ];
}

impl_structural_dyn!{ impl[T] Huh<T> }

impl<T> GetField<TI!(v a l u e)> for Huh<T>{
    type Ty=T;

    fn get_field_(&self)->&Self::Ty{
        &self.value
    }
}

Associated Types

type Ty

The type of the FieldName field.

Loading content...

Required methods

fn get_field_(&self) -> &Self::Ty

Accesses the FieldName field by reference.

Loading content...

Implementations on Foreign Types

impl<C0> GetField<TString<(_0,)>> for (C0,)[src]

type Ty = C0

impl<C0, C1> GetField<TString<(_0,)>> for (C0, C1)[src]

type Ty = C0

impl<C0, C1> GetField<TString<(_1,)>> for (C0, C1)[src]

type Ty = C1

impl<C0, C1, C2> GetField<TString<(_0,)>> for (C0, C1, C2)[src]

type Ty = C0

impl<C0, C1, C2> GetField<TString<(_1,)>> for (C0, C1, C2)[src]

type Ty = C1

impl<C0, C1, C2> GetField<TString<(_2,)>> for (C0, C1, C2)[src]

type Ty = C2

impl<C0, C1, C2, C3> GetField<TString<(_0,)>> for (C0, C1, C2, C3)[src]

type Ty = C0

impl<C0, C1, C2, C3> GetField<TString<(_1,)>> for (C0, C1, C2, C3)[src]

type Ty = C1

impl<C0, C1, C2, C3> GetField<TString<(_2,)>> for (C0, C1, C2, C3)[src]

type Ty = C2

impl<C0, C1, C2, C3> GetField<TString<(_3,)>> for (C0, C1, C2, C3)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7> GetField<TString<(_7,)>> for (C0, C1, C2, C3, C4, C5, C6, C7)[src]

type Ty = C7

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_7,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C7

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8> GetField<TString<(_8,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)[src]

type Ty = C8

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_7,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C7

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_8,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C8

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> GetField<TString<(_9,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)[src]

type Ty = C9

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_7,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C7

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_8,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C8

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_9,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C9

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> GetField<TString<(_1, _0)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)[src]

type Ty = C10

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_0,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C0

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_1,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C1

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_2,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C2

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_3,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C3

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_4,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C4

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_5,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C5

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_6,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C6

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_7,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C7

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_8,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C8

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_9,)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C9

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_1, _0)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C10

impl<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> GetField<TString<(_1, _1)>> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)[src]

type Ty = C11

impl<T> GetField<TString<(_s, _t, _a, _r, _t)>> for Range<T>[src]

type Ty = T

impl<T> GetField<TString<(_e, _n, _d)>> for Range<T>[src]

type Ty = T

impl<T> GetField<TString<(_s, _t, _a, _r, _t)>> for RangeFrom<T>[src]

type Ty = T

impl<T> GetField<TString<(_e, _n, _d)>> for RangeTo<T>[src]

type Ty = T

impl<T> GetField<TString<(_e, _n, _d)>> for RangeToInclusive<T>[src]

type Ty = T

impl<T> GetField<TString<(_s, _t, _a, _r, _t)>> for RangeInclusive<T>[src]

type Ty = T

impl<T> GetField<TString<(_e, _n, _d)>> for RangeInclusive<T>[src]

type Ty = T

impl<T, __FieldName> GetField<__FieldName> for ManuallyDrop<T> where
    T: GetField<__FieldName>, 
[src]

type Ty = GetFieldType<T, __FieldName>

impl<P, __FieldName> GetField<__FieldName> for Pin<P> where
    P::Target: GetField<__FieldName>,
    P: Deref,
    P::Target: Sized
[src]

type Ty = GetFieldType<P::Target, __FieldName>

impl<This: ?Sized, Name, Ty> GetField<Name> for Box<This> where
    This: GetField<Name, Ty = Ty>, 
[src]

type Ty = Ty

impl<This: ?Sized, Name, Ty> GetField<Name> for Arc<This> where
    This: GetField<Name, Ty = Ty>, 
[src]

type Ty = Ty

impl<This: ?Sized, Name, Ty> GetField<Name> for Rc<This> where
    This: GetField<Name, Ty = Ty>, 
[src]

type Ty = Ty

Loading content...

Implementors

Loading content...