Crate field_ref [] [src]

Field reference (like a member pointer to non-static data field in C++) for Rust

Examples

#[macro_use]
extern crate field_ref;
 
use field_ref::{Field, FieldMut};
 
struct Foo(u32, u32, f64);
struct Bar {
    foo: Foo,
    x: u32,
}
 
let fr1 = field_ref_of!(Bar => x);
let fr2 = field_ref_of!(Bar => foo);
let fr3 = field_ref_of!(Foo => 1);
let fr4 = field_ref_of!(Bar => foo => 0);
 
let mut bar = Bar { foo: Foo(10, 20, 0.5), x: 30 };
 
assert_eq!(bar.field(fr1), &30);
assert_eq!(fr1.get_ref(&bar), &30);
 
*bar.field_mut(fr1) = 100;
assert_eq!(bar.x, 100);
 
*fr1.get_mut(&mut bar) = 200;
assert_eq!(bar.x, 200);
 
assert_eq!(bar.field(fr2.chain(fr3)), &20);
assert_eq!(bar.field(fr4), &10);

Macros

field_ref_of

Creates a new FieldRef from basic type and fields which are (recursively) contained by that type.

Structs

FieldRef

A reference to field of type U (recursively) contained by an object of type T.

Traits

Field

A trait to obtain a value to which FieldRef references via description like `obj.field(field_ref)'.

FieldMut

A trait to obtain a mutable value to which FieldRef references via description like `obj.field_mut(field_ref)'.