1
2#[derive(Default, Clone, Copy, PartialEq, Eq, Debug)]
4pub struct Sides<T> {
5 pub top: T,
6 pub bottom: T,
7 pub left: T,
8 pub right: T,
9}
10
11impl<T: Clone> Sides<T> {
12 #[inline]
13 pub fn all(value: T) -> Self {
14 Self {
15 top: value.clone(),
16 bottom: value.clone(),
17 left: value.clone(),
18 right: value,
19 }
20 }
21
22 #[inline]
23 pub fn horizontal_vertical(horizontal: T, vertical: T) -> Self {
24 Self {
25 top: vertical.clone(),
26 bottom: vertical,
27 left: horizontal.clone(),
28 right: horizontal,
29 }
30 }
31}
32
33impl<T: Clone> From<T> for Sides<T> {
34 fn from(value: T) -> Self {
35 Self::all(value)
36 }
37}
38
39impl<T: Clone> From<(T, T)> for Sides<T> {
40 fn from((horizontal, vertical): (T, T)) -> Self {
41 Self::horizontal_vertical(horizontal, vertical)
42 }
43}
44
45impl<T> From<(T, T, T, T)> for Sides<T> {
46 fn from((top, bottom, left, right): (T, T, T, T)) -> Self {
47 Self { top, bottom, left, right }
48 }
49}