struct Triangle { b: f64, h: f64, } struct Rectangle { l1: f64, l2: f64, } trait Figure { fn area(&self) -> f64; } impl Figure for Triangle { fn area(&self) -> f64 { self.b * self.h / 2.0 } } impl Figure for Rectangle { fn area(&self) -> f64 { self.l1 * self.l2 } } fn print_area(f: &dyn Figure) { //fn print_area(f: &T) { println!("The area of this figure is {}", f.area()) } fn figure_id(v: i32) -> i32 { v / 2 } fn main() { let f1 = Triangle{b: 5.0, h: 8.0}; let f2 = Rectangle{l1: 4.0, l2: 6.0}; let n; let f; n = figure_id(5); if n == 1 { f = &f1 as &dyn Figure; } else { f = &f2 as &dyn Figure; } print_area(f) }