struct Nil; struct Pair(i32, f32); #[derive(Debug)] struct Point { x: f32, y: f32, } #[derive(Debug)] struct Rectangle { p1: Point, p2: Point, } fn rect_area(rect: Rectangle) -> f32 { let Rectangle { p1: Point { x: x1, y: y1 }, p2: Point { x: x2, y: y2 } } = rect; ((x1 - x2) * (y1 - y2)).abs() } fn square(point: Point, dim: f32) -> Rectangle { Rectangle { p1: Point { x: point.x, y: point.y }, p2: Point { x: point.x + dim, y: point.y + dim }, } } fn main() { let point: Point = Point { x: 0.3, y: 0.4 }; println!("point coordinates: ({}, {})", point.x, point.y); let Point { x: my_x, y: my_y } = point; let _rectangle = Rectangle { p1: Point { x: my_y, y: my_x }, p2: Point { x: point.x, y: point.y }, }; let _nil = Nil; let pair = Pair(1, 0.1); println!("pair contains {:?} and {:?}", pair.0, pair.1); let Pair(integer, decimal) = pair; println!("pair contains {:?} and {:?}", integer, decimal); println!("rect is {:?}", _rectangle); println!("rect area is {}", rect_area(_rectangle)); let dim = 9.1f32; println!("point is {:?}", point); println!("dim is {:?}", dim); let sq = square(point, dim); println!("square is {:?}", sq); println!("square area is {}", rect_area(sq)); }