// Created on savesnippets.com · https://savesnippets.com/pJE5IBNHnUnbbN trait Greeter { fn name(&self) -> &str; // Default — only `name` must be implemented. fn greet(&self) -> String { format!("Hello, {}!", self.name()) } fn shout(&self) -> String { self.greet().to_uppercase() } } struct Person { name: String } impl Greeter for Person { fn name(&self) -> &str { &self.name } // Override only if you want different behavior fn greet(&self) -> String { format!("Howdy, {}!", self.name) } } fn main() { let p = Person { name: "Alice".into() }; println!("{}", p.greet()); // Howdy, Alice! (overridden) println!("{}", p.shout()); // HOWDY, ALICE! (uses default) }