primitives/foundation/colorspace/
convert.rs1use super::*;
2
3pub trait FromColor<Fr> {
5 fn from_color(color: Fr) -> Self;
7}
8
9pub trait IntoColor<To> {
11 fn into_color(self) -> To;
13}
14
15impl<Fr, To> FromColor<Fr> for To
16where
17 To: From<Color>,
18 Fr: Into<Color>,
19{
20 fn from_color(from_color: Fr) -> To {
21 To::from(from_color.into())
22 }
23}
24
25impl<Fr, To> IntoColor<To> for Fr
26where
27 To: FromColor<Fr>,
28{
29 fn into_color(self) -> To {
30 To::from_color(self)
31 }
32}
33
34impl From<RgbColor> for RgbaColor {
36 fn from(c: RgbColor) -> Self {
37 RgbaColor {
38 red: c.red,
39 green: c.green,
40 blue: c.blue,
41 alpha: 255,
42 }
43 }
44}
45impl From<RgbColor> for HslColor {
46 fn from(c: RgbColor) -> Self {
47 Self::from_color(c)
48 }
49}
50impl From<RgbColor> for HsvColor {
51 fn from(c: RgbColor) -> Self {
52 Self::from_color(c)
53 }
54}
55impl From<RgbColor> for CmykColor {
56 fn from(c: RgbColor) -> Self {
57 Self::from_color(c)
58 }
59}
60impl From<RgbColor> for CmyColor {
61 fn from(c: RgbColor) -> Self {
62 Self::from_color(c)
63 }
64}
65#[cfg(feature = "experimental")]
66impl From<RgbColor> for LabColor {
67 fn from(c: RgbColor) -> Self {
68 Self::from_color(c)
69 }
70}
71#[cfg(feature = "experimental")]
72impl From<RgbColor> for XyzColor {
73 fn from(c: RgbColor) -> Self {
74 Self::from_color(c)
75 }
76}
77
78impl From<RgbaColor> for RgbColor {
80 fn from(c: RgbaColor) -> Self {
81 RgbColor {
82 red: c.red,
83 green: c.green,
84 blue: c.blue,
85 }
86 }
87}
88impl From<RgbaColor> for HslColor {
89 fn from(c: RgbaColor) -> Self {
90 Self::from_color(c)
91 }
92}
93impl From<RgbaColor> for HsvColor {
94 fn from(c: RgbaColor) -> Self {
95 Self::from_color(c)
96 }
97}
98impl From<RgbaColor> for CmykColor {
99 fn from(c: RgbaColor) -> Self {
100 Self::from_color(c)
101 }
102}
103impl From<RgbaColor> for CmyColor {
104 fn from(c: RgbaColor) -> Self {
105 Self::from_color(c)
106 }
107}
108#[cfg(feature = "experimental")]
109impl From<RgbaColor> for LabColor {
110 fn from(c: RgbaColor) -> Self {
111 Self::from_color(c)
112 }
113}
114#[cfg(feature = "experimental")]
115impl From<RgbaColor> for XyzColor {
116 fn from(c: RgbaColor) -> Self {
117 Self::from_color(c)
118 }
119}
120
121impl From<HslColor> for RgbColor {
123 fn from(c: HslColor) -> Self {
124 Self::from_color(c)
125 }
126}
127impl From<HslColor> for RgbaColor {
128 fn from(c: HslColor) -> Self {
129 Self::from_color(c)
130 }
131}
132impl From<HslColor> for HsvColor {
133 fn from(c: HslColor) -> Self {
134 Self::from_color(c)
135 }
136}
137impl From<HslColor> for CmykColor {
138 fn from(c: HslColor) -> Self {
139 Self::from_color(c)
140 }
141}
142impl From<HslColor> for CmyColor {
143 fn from(c: HslColor) -> Self {
144 Self::from_color(c)
145 }
146}
147#[cfg(feature = "experimental")]
148impl From<HslColor> for LabColor {
149 fn from(c: HslColor) -> Self {
150 Self::from_color(c)
151 }
152}
153#[cfg(feature = "experimental")]
154impl From<HslColor> for XyzColor {
155 fn from(c: HslColor) -> Self {
156 Self::from_color(c)
157 }
158}
159
160impl From<HsvColor> for RgbColor {
162 fn from(c: HsvColor) -> Self {
163 Self::from_color(c)
164 }
165}
166impl From<HsvColor> for RgbaColor {
167 fn from(c: HsvColor) -> Self {
168 Self::from_color(c)
169 }
170}
171impl From<HsvColor> for HslColor {
172 fn from(c: HsvColor) -> Self {
173 Self::from_color(c)
174 }
175}
176impl From<HsvColor> for CmykColor {
177 fn from(c: HsvColor) -> Self {
178 Self::from_color(c)
179 }
180}
181impl From<HsvColor> for CmyColor {
182 fn from(c: HsvColor) -> Self {
183 Self::from_color(c)
184 }
185}
186#[cfg(feature = "experimental")]
187impl From<HsvColor> for LabColor {
188 fn from(c: HsvColor) -> Self {
189 Self::from_color(c)
190 }
191}
192#[cfg(feature = "experimental")]
193impl From<HsvColor> for XyzColor {
194 fn from(c: HsvColor) -> Self {
195 Self::from_color(c)
196 }
197}
198
199impl From<CmykColor> for RgbColor {
201 fn from(c: CmykColor) -> Self {
202 Self::from_color(c)
203 }
204}
205impl From<CmykColor> for RgbaColor {
206 fn from(c: CmykColor) -> Self {
207 Self::from_color(c)
208 }
209}
210impl From<CmykColor> for HslColor {
211 fn from(c: CmykColor) -> Self {
212 Self::from_color(c)
213 }
214}
215impl From<CmykColor> for HsvColor {
216 fn from(c: CmykColor) -> Self {
217 Self::from_color(c)
218 }
219}
220impl From<CmykColor> for CmyColor {
221 fn from(c: CmykColor) -> Self {
222 Self::from_color(c)
223 }
224}
225#[cfg(feature = "experimental")]
226impl From<CmykColor> for LabColor {
227 fn from(c: CmykColor) -> Self {
228 Self::from_color(c)
229 }
230}
231#[cfg(feature = "experimental")]
232impl From<CmykColor> for XyzColor {
233 fn from(c: CmykColor) -> Self {
234 Self::from_color(c)
235 }
236}
237
238impl From<CmyColor> for RgbColor {
240 fn from(c: CmyColor) -> Self {
241 Self::from_color(c)
242 }
243}
244impl From<CmyColor> for RgbaColor {
245 fn from(c: CmyColor) -> Self {
246 Self::from_color(c)
247 }
248}
249impl From<CmyColor> for HslColor {
250 fn from(c: CmyColor) -> Self {
251 Self::from_color(c)
252 }
253}
254impl From<CmyColor> for HsvColor {
255 fn from(c: CmyColor) -> Self {
256 Self::from_color(c)
257 }
258}
259impl From<CmyColor> for CmykColor {
260 fn from(c: CmyColor) -> Self {
261 Self::from_color(c)
262 }
263}
264#[cfg(feature = "experimental")]
265impl From<CmyColor> for LabColor {
266 fn from(c: CmyColor) -> Self {
267 Self::from_color(c)
268 }
269}
270#[cfg(feature = "experimental")]
271impl From<CmyColor> for XyzColor {
272 fn from(c: CmyColor) -> Self {
273 Self::from_color(c)
274 }
275}
276
277#[cfg(test)]
278mod test {
279 use super::super::prelude::*;
280
281 use super::super::*;
282
283 #[test]
284 fn into_color_self() {
285 let rgb1 = Color::new(200., 200., 200., 1.);
286 let rgb2: Color = rgb1.into_color();
287 assert_eq!(rgb1.red, rgb2.red);
288 assert_eq!(rgb1.green, rgb2.green);
289 assert_eq!(rgb1.blue, rgb2.blue);
290 assert_eq!(rgb1.get_hue(), rgb2.get_hue());
291 assert_eq!(rgb1.get_hsl_saturation(), rgb2.get_hsl_saturation());
292 }
293}