1#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
3pub struct RGB {
4 pub r: u8,
6 pub g: u8,
8 pub b: u8,
10}
11
12#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
14pub struct Style {
15 pub fill_color: Color,
17
18 pub stroke_color: Color,
20
21 pub stroke_width: i32,
25}
26
27impl Default for Style {
28 fn default() -> Self {
29 Self {
30 fill_color: Color::None,
31 stroke_color: Color::None,
32 stroke_width: 1,
33 }
34 }
35}
36
37impl Style {
38 #[must_use]
42 pub const fn as_line_style(&self) -> LineStyle {
43 LineStyle {
44 color: self.stroke_color,
45 width: self.stroke_width,
46 }
47 }
48}
49
50#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
52pub struct LineStyle {
53 pub color: Color,
55 pub width: i32,
57}
58
59impl From<Style> for LineStyle {
60 fn from(value: Style) -> Self {
61 Self {
62 color: value.stroke_color,
63 width: value.stroke_width,
64 }
65 }
66}
67
68#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
70pub enum Color {
71 None,
73 Black,
75 Purple,
77 Red,
79 Orange,
81 Yellow,
83 LightGreen,
85 Green,
87 DarkGreen,
89 DarkBlue,
91 Blue,
93 LightBlue,
95 Cyan,
97 White,
99 LightGray,
101 Gray,
103 DarkGray,
105}
106
107impl Default for Color {
108 fn default() -> Self {
109 Self::None
110 }
111}
112
113impl TryFrom<usize> for Color {
114 type Error = ();
115
116 fn try_from(value: usize) -> Result<Self, Self::Error> {
117 match value {
118 0 => Ok(Color::None),
119 1 => Ok(Color::Black),
120 2 => Ok(Color::Purple),
121 3 => Ok(Color::Red),
122 4 => Ok(Color::Orange),
123 5 => Ok(Color::Yellow),
124 6 => Ok(Color::LightGreen),
125 7 => Ok(Color::Green),
126 8 => Ok(Color::DarkGreen),
127 9 => Ok(Color::DarkBlue),
128 10 => Ok(Color::Blue),
129 11 => Ok(Color::LightBlue),
130 12 => Ok(Color::Cyan),
131 13 => Ok(Color::White),
132 14 => Ok(Color::LightGray),
133 15 => Ok(Color::Gray),
134 16 => Ok(Color::DarkGray),
135 _ => Err(()),
136 }
137 }
138}
139
140impl From<Color> for i32 {
141 fn from(value: Color) -> Self {
142 match value {
143 Color::None => 0,
144 Color::Black => 1,
145 Color::Purple => 2,
146 Color::Red => 3,
147 Color::Orange => 4,
148 Color::Yellow => 5,
149 Color::LightGreen => 6,
150 Color::Green => 7,
151 Color::DarkGreen => 8,
152 Color::DarkBlue => 9,
153 Color::Blue => 10,
154 Color::LightBlue => 11,
155 Color::Cyan => 12,
156 Color::White => 13,
157 Color::LightGray => 14,
158 Color::Gray => 15,
159 Color::DarkGray => 16,
160 }
161 }
162}