Bo

Posted on

# Day3:structs,enum - 100DayOfRust

## Struct

Use `struct` to build structure, and you can destructure the struct using a `let` binding:

``````struct Point(i32, i32);

struct Rect {
top_left: Point,
bottom_right: Point,
}

fn rect_area(rect: &Rect) -> i32 {
// here we used a nested destructuring
let Rect { top_left: Point(x1, y1),
bottom_right: Point(x2, y2)} = rect;
let width = x2 - x1;
let height = y2 - y1;
width * height
}

fn main() {
let rect = Rect {top_left: Point(1, 2),
bottom_right: Point(3, 4)};
let area = rect_area(&rect);
println!("Area of rect is {}", area);
}
``````

Result:

``````Area of rect is 4
``````

## Enum

``````enum Operator {
Sub,
Mul,
Div,
}

type Op = Operator;

// we can implement methods for enum
impl Operator {
fn run(&self, i: f32, j: f32) -> f32 {
match self {
Operator::Sub => i - j,
Operator::Mul => i * j,
Operator::Div => i / j,
}
}
}

fn main() {
let suber = Operator::Sub;
let muler = Operator::Mul;
let diver = Operator::Div;
let num1 = 3 as f32;
let num2 = 4 as f32;
println!("{} + {} = {}", num1, num2, adder.run(num1, num2));
println!("{} - {} = {}", num1, num2, suber.run(num1, num2));
println!("{} * {} = {}", num1, num2, muler.run(num1, num2));
println!("{} / {} = {}", num1, num2, diver.run(num1, num2));

}
``````

Result:

``````3 + 4 = 7
3 - 4 = -1
3 * 4 = 12
3 / 4 = 0.75
``````

#### Enum can be used as C-like enums

``````enum Color {
Red = 0xff0000,
Green = 0x00ff00,

}
``````

#### Enum with different type

``````enum WebEvent {
KeyPress(char),
Click {x: i64, y: i64},
}
``````