typechain 0.1.0

Create chains of trait objects
Documentation
use typechain::use_chains;

mod types;
use types::{Farmer, FarmAnimal, WildAnimal};

use_chains![
    types::Living,
    types::Animal
];

#[test]
fn test_farm() {
    let farmer = Farmer::new("John", 42);

    let animals: Vec<Box<Animal>> = vec![
        Box::new(FarmAnimal::new("Cow", 4)),
        Box::new(WildAnimal::new("Wolf", 4))
    ];

    for animal in animals {
        assert_eq!(animal.legs(), &4);
    }

    assert_eq!(farmer.name(), "John");
    assert_eq!(farmer.age, 42);

    let _ = vec![
        Box::new(farmer) as Box<Living>,
        Box::new(FarmAnimal::new("Cow", 4)) as Box<Living>,
        Box::new(WildAnimal::new("Wolf", 4)) as Box<Living>
    ];
}