1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// A 2D vector.
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Vec2 {
    /// X coordinate.
    pub x: i32,
    /// Y coordinate.
    pub y: i32,
}

impl Vec2 {
    /// Build a new 2D vector.
    pub const fn new(x: i32, y: i32) -> Self {
        Self { x, y }
    }
}

impl From<(i32, i32)> for Vec2 {
    fn from((x, y): (i32, i32)) -> Self {
        Vec2::new(x, y)
    }
}

impl From<Vec2> for (i32, i32) {
    fn from(value: Vec2) -> Self {
        (value.x, value.y)
    }
}