fn main() { { struct Point { x: T, y: T, } impl Point { fn x(&self) -> &T { &self.x } } // implement a particular concrete type impl Point { fn distance_from_origin(&self) -> f32 { (self.x.powi(2) + self.y.powi(2)).sqrt() } } let p = Point { x: 5, y: 10 }; println!("p.x = {}", p.x()); let p2 = Point { x: 1.0, y: 4.0 }; println!( "distance between p2 and origin: {}", p2.distance_from_origin() ); } { struct Point { x: T, y: U, } impl Point { fn mixup(self, other: Point) -> Point { Point { x: self.x, y: other.y, } } } let p1 = Point { x: 5, y: 10.4 }; let p2 = Point { x: "Hello", y: 'c' }; let p3 = p1.mixup(p2); println!("p3.x = {}, p3.y = {}", p3.x, p3.y); } }