Как я понимаю (а я нифига не понимаю), тут что-то типа
enum Tree1<a> {
Nil,
Node1(a), // дальше непонятно
}
enum Tree2<a, b> {
Leaf2(b),
Node2(a, b), // снова непонятно
}
enum Tree3 {
Leaf3(String),
Node3(String), // снова непонятно
}
struct Lst<a>([a])
trait Size {
fn size(&self) -> i32;
}
impl Size for Tree1 {
fn size(&self) -> i32 {
match self {
Tree1::Nil => 0,
Tree::Node1 => какая-то ебанина
}
}
}
И т.д.