#[derive(Debug)] struct Rectangle { width: u32, height: u32, } // You could also have an individual impl block // for each method impl Rectangle { fn area(&self) -> u32 { self.width * self.height } fn can_hold(&self, other: &Rectangle) -> bool { self.width > other.width && self.height > other.height } } impl Rectangle { // This is basically a static method // But is called an associated function fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size, } } } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; let rect2 = Rectangle { width: 10, height: 40 }; let rect3 = Rectangle { width: 60, height: 45 }; println!( "The area of the rectangle is {} square pixels.", rect1.area() ); println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2)); println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3)); println!("A square is a rectangle with equal sides: {:#?}", Rectangle::square(10)); }