trait Animal { fn name(&self) -> String; } trait Speak: Animal { fn speak(&self) { println!("{} can't speak", self.name()); } } struct Dog { name: String } impl Animal for Dog { fn name(&self) -> String { self.name.clone() } } impl Speak for Dog {} #[test] pub fn test_nested_traits() { let dog = Dog { name: String::from("Fido") }; dog.speak(); // prints "Fido can't speak" }