auto-delegate 0.1.3

Auto delegate allows you that automatic impl of traits and delegate their handling to child members.
Documentation
use std::fmt::Debug;

use auto_delegate_impl::delegate;

use crate::sub_module::addr::Addr;
use crate::sub_module::increment::Increment;

#[delegate]
pub trait Readable<T>
where
    T: Debug + Default,
{
    fn read(&self) -> &T;
}

pub struct MultipleChild<T> {
    num: usize,
    value: T,
}

impl<T: Debug + Default> Default for MultipleChild<T> {
    fn default() -> Self {
        Self {
            num: 0,
            value: T::default(),
        }
    }
}

impl<T> Addr for MultipleChild<T>
where
    T: Debug + Default,
{
    fn add(&self, x1: usize, x2: usize) -> usize {
        x1 + x2
    }
}

impl<T> Increment for MultipleChild<T>
where
    T: Debug + Default,
{
    fn increment(&mut self) -> usize {
        self.num += 1;
        self.num
    }
}

impl<T> Readable<T> for MultipleChild<T>
where
    T: Debug + Default,
{
    fn read(&self) -> &T {
        &self.value
    }
}