1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| trait Draw { fn draw(&self); }
struct Screen { components: Vec<Box<dyn Draw>>, }
impl Screen { fn run(&self) { for component in self.components.iter() { component.draw(); } } }
struct Button { width: u32, height: u32, label: String, }
impl Draw for Button { fn draw(&self) { println!("Button: {}, {}, {}", self.width, self.height, self.label); } }
struct Image { width: u32, height: u32, data: Vec<u8>, }
impl Draw for Image { fn draw(&self) { println!("Image: {}, {}, {}", self.width, self.height, self.data.len()); } }
fn main() { let screen = Screen { components: vec![ Box::new(Button { width: 75, height: 10, label: String::from("OK"), }), Box::new(Image { width: 10, height: 10, data: vec![1, 0, 0, 1], }), ], };
screen.run(); }
|