uniplate 0.4.6

Simple, boilerplate-free operations on tree-shaped data types
Documentation
use uniplate::Uniplate;

#[derive(Uniplate, PartialEq, Eq, Clone)]
#[uniplate()]
struct Tree {
    value: i32,
    children: Vec<Tree>,
}

fn main() {
    let x = Tree {
        value: 0,
        children: vec![
            Tree {
                value: 1,
                children: vec![
                    Tree {
                        value: 2,
                        children: vec![],
                    },
                    Tree {
                        value: 3,
                        children: vec![],
                    },
                ],
            },
            Tree {
                value: 4,
                children: vec![Tree {
                    value: 5,
                    children: vec![Tree {
                        value: 6,
                        children: vec![],
                    }],
                }],
            },
        ],
    };

    assert_eq!(
        (0..7).collect::<Vec<_>>(),
        x.universe().iter().map(|x| x.value).collect::<Vec<_>>()
    );
}