auto-delegate 0.1.3

Auto delegate allows you that automatic impl of traits and delegate their handling to child members.
Documentation
use auto_delegate::{delegate, Delegate};

#[delegate]
trait Transformable {
    fn position(&self) -> (usize, usize);

    fn move_to(&mut self, pos: (usize, usize));
}

#[derive(Default)]
struct Child {
    pos: (usize, usize),
}

impl Transformable for Child {
    fn position(&self) -> (usize, usize) {
        self.pos
    }

    fn move_to(&mut self, pos: (usize, usize)) {
        self.pos = pos;
    }
}


#[derive(Delegate, Default)]
struct Parent {
    #[to(Transformable)]
    child: Child,
}


fn main() {
    let mut parent = Parent::default();
    assert_eq!(parent.position(), (0, 0));

    parent.move_to((3, 3));
    assert_eq!(parent.position(), (3, 3));
}