fn main() { trait Label { fn label(&self) -> &str; } struct Tray; struct Basket; impl Label for Tray { fn label(&self) -> &str { "tray" } } impl Label for Basket { fn label(&self) -> &str { "basket" } } let items: Vec> = vec![Box::new(Tray), Box::new(Basket)]; assert_eq!(items.iter().map(|x| x.label()).collect::>(), vec!["tray","basket"]); println!("Dynamic labels: tray, basket"); }