ui_automation/
position.rs

1// Copyright (C) 2024 Tristan Gerritsen <tristan@thewoosh.org>
2// All Rights Reserved.
3
4use std::fmt::Display;
5
6#[derive(Debug, Default, Clone, Copy, PartialEq, PartialOrd)]
7pub struct Position {
8    x: f64,
9    y: f64,
10}
11
12impl Position {
13    #[must_use]
14    pub const fn new(x: f64, y: f64) -> Self {
15        Self {
16            x,
17            y,
18        }
19    }
20
21    #[must_use]
22    pub const fn x(&self) -> f64 {
23        self.x
24    }
25
26    #[must_use]
27    pub const fn y(&self) -> f64 {
28        self.y
29    }
30}
31
32impl Display for Position {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        f.write_fmt(format_args!("({}, {})", self.x, self.y))
35    }
36}
37
38impl From<(f64, f64)> for Position {
39    fn from(value: (f64, f64)) -> Self {
40        Self::new(value.0, value.1)
41    }
42}
43
44impl From<(f32, f32)> for Position {
45    fn from(value: (f32, f32)) -> Self {
46        Self::new(value.0 as f64, value.1 as f64)
47    }
48}
49
50impl From<(i8, i8)> for Position {
51    fn from(value: (i8, i8)) -> Self {
52        Self::new(value.0 as f64, value.1 as f64)
53    }
54}
55
56impl From<(i16, i16)> for Position {
57    fn from(value: (i16, i16)) -> Self {
58        Self::new(value.0 as f64, value.1 as f64)
59    }
60}
61
62impl From<(i32, i32)> for Position {
63    fn from(value: (i32, i32)) -> Self {
64        Self::new(value.0 as f64, value.1 as f64)
65    }
66}
67
68impl From<(i64, i64)> for Position {
69    fn from(value: (i64, i64)) -> Self {
70        Self::new(value.0 as f64, value.1 as f64)
71    }
72}
73
74impl From<(isize, isize)> for Position {
75    fn from(value: (isize, isize)) -> Self {
76        Self::new(value.0 as f64, value.1 as f64)
77    }
78}
79
80impl From<(u8, i8)> for Position {
81    fn from(value: (u8, i8)) -> Self {
82        Self::new(value.0 as f64, value.1 as f64)
83    }
84}
85
86impl From<(u16, i16)> for Position {
87    fn from(value: (u16, i16)) -> Self {
88        Self::new(value.0 as f64, value.1 as f64)
89    }
90}
91
92impl From<(u32, i32)> for Position {
93    fn from(value: (u32, i32)) -> Self {
94        Self::new(value.0 as f64, value.1 as f64)
95    }
96}
97
98impl From<(u64, i64)> for Position {
99    fn from(value: (u64, i64)) -> Self {
100        Self::new(value.0 as f64, value.1 as f64)
101    }
102}
103
104impl From<(usize, isize)> for Position {
105    fn from(value: (usize, isize)) -> Self {
106        Self::new(value.0 as f64, value.1 as f64)
107    }
108}
109
110
111impl From<(i8, u8)> for Position {
112    fn from(value: (i8, u8)) -> Self {
113        Self::new(value.0 as f64, value.1 as f64)
114    }
115}
116
117impl From<(i16, u16)> for Position {
118    fn from(value: (i16, u16)) -> Self {
119        Self::new(value.0 as f64, value.1 as f64)
120    }
121}
122
123impl From<(i32, u32)> for Position {
124    fn from(value: (i32, u32)) -> Self {
125        Self::new(value.0 as f64, value.1 as f64)
126    }
127}
128
129impl From<(i64, u64)> for Position {
130    fn from(value: (i64, u64)) -> Self {
131        Self::new(value.0 as f64, value.1 as f64)
132    }
133}
134
135impl From<(isize, usize)> for Position {
136    fn from(value: (isize, usize)) -> Self {
137        Self::new(value.0 as f64, value.1 as f64)
138    }
139}
140
141impl From<(u8, u8)> for Position {
142    fn from(value: (u8, u8)) -> Self {
143        Self::new(value.0 as f64, value.1 as f64)
144    }
145}
146
147impl From<(u16, u16)> for Position {
148    fn from(value: (u16, u16)) -> Self {
149        Self::new(value.0 as f64, value.1 as f64)
150    }
151}
152
153impl From<(u32, u32)> for Position {
154    fn from(value: (u32, u32)) -> Self {
155        Self::new(value.0 as f64, value.1 as f64)
156    }
157}
158
159impl From<(u64, u64)> for Position {
160    fn from(value: (u64, u64)) -> Self {
161        Self::new(value.0 as f64, value.1 as f64)
162    }
163}
164
165impl From<(usize, usize)> for Position {
166    fn from(value: (usize, usize)) -> Self {
167        Self::new(value.0 as f64, value.1 as f64)
168    }
169}