1use super::*;
2
3macro_rules! simple_from {
4 ($from: ident to $to: ty, via $int: ty) => {
5 impl From<$from> for $to {
6 fn from(value: $from) -> Self {
7 let intermediary: $int = value.into();
8 intermediary.into()
9 }
10 }
11 };
12}
13
14simple_from!(Hsv to A98Rgb, via Srgb);
15simple_from!(Hex to A98Rgb, via Srgb);
16simple_from!(Hsl to A98Rgb, via Srgb);
17simple_from!(Hwb to A98Rgb, via Hsv);
18simple_from!(Lab to A98Rgb, via XyzD50);
19simple_from!(Lch to A98Rgb, via Lab);
20simple_from!(Named to A98Rgb, via Srgb);
21simple_from!(Oklab to A98Rgb, via XyzD65);
22simple_from!(Oklch to A98Rgb, via Oklab);
23simple_from!(Srgb to A98Rgb, via LinearRgb);
24simple_from!(XyzD50 to A98Rgb, via XyzD65);
25simple_from!(XyzD65 to A98Rgb, via LinearRgb);
26
27simple_from!(A98Rgb to Hsv, via LinearRgb);
28simple_from!(A98Rgb to Hex, via Srgb);
29simple_from!(A98Rgb to Hsl, via LinearRgb);
30simple_from!(A98Rgb to Hwb, via LinearRgb);
31simple_from!(A98Rgb to Lab, via LinearRgb);
32simple_from!(A98Rgb to Lch, via LinearRgb);
33simple_from!(A98Rgb to Oklab, via LinearRgb);
34simple_from!(A98Rgb to Oklch, via LinearRgb);
35simple_from!(A98Rgb to Srgb, via LinearRgb);
36simple_from!(A98Rgb to XyzD50, via LinearRgb);
37simple_from!(A98Rgb to XyzD65, via LinearRgb);
38
39simple_from!(A98Rgb to DisplayP3, via LinearRgb);
41simple_from!(Hex to DisplayP3, via LinearRgb);
42simple_from!(Hsv to DisplayP3, via LinearRgb);
43simple_from!(Hsl to DisplayP3, via LinearRgb);
44simple_from!(Hwb to DisplayP3, via LinearRgb);
45simple_from!(Lab to DisplayP3, via LinearRgb);
46simple_from!(Lch to DisplayP3, via LinearRgb);
47simple_from!(Named to DisplayP3, via LinearRgb);
49simple_from!(Oklab to DisplayP3, via LinearRgb);
50simple_from!(Oklch to DisplayP3, via LinearRgb);
51simple_from!(Srgb to DisplayP3, via LinearRgb);
52simple_from!(XyzD50 to DisplayP3, via XyzD65);
53
54simple_from!(DisplayP3 to A98Rgb, via LinearRgb);
55simple_from!(DisplayP3 to Hex, via LinearRgb);
56simple_from!(DisplayP3 to Hsv, via LinearRgb);
57simple_from!(DisplayP3 to Hsl, via LinearRgb);
58simple_from!(DisplayP3 to Hwb, via LinearRgb);
59simple_from!(DisplayP3 to Lab, via LinearRgb);
60simple_from!(DisplayP3 to Lch, via LinearRgb);
61simple_from!(DisplayP3 to Oklab, via LinearRgb);
63simple_from!(DisplayP3 to Oklch, via LinearRgb);
64simple_from!(DisplayP3 to Srgb, via LinearRgb);
65simple_from!(DisplayP3 to XyzD50, via LinearRgb);
66simple_from!(DisplayP3 to ProphotoRgb, via XyzD65);
67simple_from!(DisplayP3 to Rec2020, via XyzD65);
68
69simple_from!(A98Rgb to ProphotoRgb, via XyzD50);
71simple_from!(Hex to ProphotoRgb, via XyzD50);
72simple_from!(Hsv to ProphotoRgb, via XyzD50);
73simple_from!(Hsl to ProphotoRgb, via XyzD50);
74simple_from!(Hwb to ProphotoRgb, via XyzD50);
75simple_from!(Lab to ProphotoRgb, via XyzD50);
76simple_from!(Lch to ProphotoRgb, via XyzD50);
77simple_from!(LinearRgb to ProphotoRgb, via XyzD50);
78simple_from!(Named to ProphotoRgb, via XyzD50);
79simple_from!(Oklab to ProphotoRgb, via XyzD50);
80simple_from!(Oklch to ProphotoRgb, via XyzD50);
81simple_from!(Srgb to ProphotoRgb, via XyzD50);
82simple_from!(XyzD65 to ProphotoRgb, via XyzD50);
83
84simple_from!(ProphotoRgb to A98Rgb, via XyzD50);
85simple_from!(ProphotoRgb to Hex, via XyzD50);
86simple_from!(ProphotoRgb to Hsv, via XyzD50);
87simple_from!(ProphotoRgb to Hsl, via XyzD50);
88simple_from!(ProphotoRgb to Hwb, via XyzD50);
89simple_from!(ProphotoRgb to Lab, via XyzD50);
90simple_from!(ProphotoRgb to Lch, via XyzD50);
91simple_from!(ProphotoRgb to LinearRgb, via XyzD50);
92simple_from!(ProphotoRgb to Oklab, via XyzD50);
93simple_from!(ProphotoRgb to Oklch, via XyzD50);
94simple_from!(ProphotoRgb to Srgb, via XyzD50);
95simple_from!(ProphotoRgb to XyzD65, via XyzD50);
96simple_from!(ProphotoRgb to Rec2020, via XyzD50);
97
98simple_from!(A98Rgb to Rec2020, via XyzD65);
100simple_from!(Hex to Rec2020, via XyzD65);
101simple_from!(Hsv to Rec2020, via XyzD65);
102simple_from!(Hsl to Rec2020, via XyzD65);
103simple_from!(Hwb to Rec2020, via XyzD65);
104simple_from!(Lab to Rec2020, via XyzD65);
105simple_from!(Lch to Rec2020, via XyzD65);
106simple_from!(LinearRgb to Rec2020, via XyzD65);
107simple_from!(Named to Rec2020, via XyzD65);
108simple_from!(Oklab to Rec2020, via XyzD65);
109simple_from!(Oklch to Rec2020, via XyzD65);
110simple_from!(Srgb to Rec2020, via XyzD65);
111simple_from!(XyzD50 to Rec2020, via XyzD65);
112
113simple_from!(Rec2020 to A98Rgb, via XyzD65);
114simple_from!(Rec2020 to Hex, via XyzD65);
115simple_from!(Rec2020 to Hsv, via XyzD65);
116simple_from!(Rec2020 to Hsl, via XyzD65);
117simple_from!(Rec2020 to Hwb, via XyzD65);
118simple_from!(Rec2020 to Lab, via XyzD65);
119simple_from!(Rec2020 to Lch, via XyzD65);
120simple_from!(Rec2020 to LinearRgb, via XyzD65);
121simple_from!(Rec2020 to Oklab, via XyzD65);
122simple_from!(Rec2020 to Oklch, via XyzD65);
123simple_from!(Rec2020 to Srgb, via XyzD65);
124simple_from!(Rec2020 to XyzD50, via XyzD65);
125simple_from!(Rec2020 to ProphotoRgb, via XyzD65);
126
127simple_from!(Hsv to Hex, via Srgb);
128simple_from!(Hsl to Hex, via Srgb);
129simple_from!(Hwb to Hex, via Srgb);
130simple_from!(Lab to Hex, via Srgb);
131simple_from!(Lch to Hex, via Srgb);
132simple_from!(LinearRgb to Hex, via Srgb);
133simple_from!(Named to Hex, via Srgb);
134simple_from!(Oklab to Hex, via XyzD65);
135simple_from!(Oklch to Hex, via Oklab);
136simple_from!(XyzD50 to Hex, via XyzD65);
137simple_from!(XyzD65 to Hex, via Srgb);
138
139simple_from!(Hex to Hsv, via Srgb);
140simple_from!(Hex to Hsl, via Srgb);
141simple_from!(Hex to Hwb, via Srgb);
142simple_from!(Hex to Lab, via Srgb);
143simple_from!(Hex to Lch, via Srgb);
144simple_from!(Hex to LinearRgb, via Srgb);
145simple_from!(Hex to Oklab, via XyzD65);
146simple_from!(Hex to Oklch, via Oklab);
147simple_from!(Hex to XyzD50, via XyzD65);
148simple_from!(Hex to XyzD65, via Srgb);
149
150simple_from!(Hsl to Hsv, via Srgb);
151simple_from!(Lab to Hsv, via Srgb);
152simple_from!(Lch to Hsv, via Srgb);
153simple_from!(Named to Hsv, via Srgb);
154simple_from!(Oklab to Hsv, via XyzD65);
155simple_from!(Oklch to Hsv, via Oklab);
156simple_from!(XyzD50 to Hsv, via XyzD65);
157simple_from!(XyzD65 to Hsv, via Srgb);
158
159simple_from!(Hsv to Hsl, via Srgb);
160simple_from!(Hsv to Lab, via Srgb);
161simple_from!(Hsv to Lch, via Srgb);
162simple_from!(Hsv to Oklab, via Srgb);
163simple_from!(Hsv to Oklch, via Srgb);
164simple_from!(Hsv to XyzD50, via Srgb);
165simple_from!(Hsv to XyzD65, via Srgb);
166
167simple_from!(Hwb to Hsl, via LinearRgb);
168simple_from!(Lab to Hsl, via LinearRgb);
169simple_from!(Lch to Hsl, via LinearRgb);
170simple_from!(Named to Hsl, via Srgb);
171simple_from!(Oklab to Hsl, via LinearRgb);
172simple_from!(Oklch to Hsl, via LinearRgb);
173simple_from!(XyzD50 to Hsl, via LinearRgb);
174simple_from!(XyzD65 to Hsl, via LinearRgb);
175
176simple_from!(Hsl to Hwb, via LinearRgb);
177simple_from!(Hsl to Lab, via LinearRgb);
178simple_from!(Hsl to Lch, via LinearRgb);
179simple_from!(Hsl to Oklab, via LinearRgb);
180simple_from!(Hsl to Oklch, via LinearRgb);
181simple_from!(Hsl to XyzD50, via LinearRgb);
182simple_from!(Hsl to XyzD65, via LinearRgb);
183
184simple_from!(Lab to Hwb, via LinearRgb);
185simple_from!(Lch to Hwb, via LinearRgb);
186simple_from!(Named to Hwb, via Srgb);
187simple_from!(Oklab to Hwb, via LinearRgb);
188simple_from!(Oklch to Hwb, via LinearRgb);
189simple_from!(XyzD50 to Hwb, via LinearRgb);
190simple_from!(XyzD65 to Hwb, via LinearRgb);
191
192simple_from!(Hwb to Lab, via LinearRgb);
193simple_from!(Hwb to Lch, via LinearRgb);
194simple_from!(Hwb to Oklab, via LinearRgb);
195simple_from!(Hwb to Oklch, via LinearRgb);
196simple_from!(Hwb to XyzD50, via LinearRgb);
197simple_from!(Hwb to XyzD65, via LinearRgb);
198
199simple_from!(Named to Lab, via Srgb);
200simple_from!(Oklab to Lab, via Srgb);
201simple_from!(Oklch to Lab, via Srgb);
202simple_from!(XyzD65 to Lab, via Srgb);
203
204simple_from!(Lab to Oklab, via XyzD50);
205simple_from!(Lab to Oklch, via XyzD50);
206simple_from!(Lab to XyzD65, via XyzD50);
207
208simple_from!(Named to Lch, via Srgb);
209simple_from!(Oklab to Lch, via Srgb);
210simple_from!(Oklch to Lch, via Srgb);
211simple_from!(XyzD50 to Lch, via Srgb);
212simple_from!(XyzD65 to Lch, via Srgb);
213
214simple_from!(Lch to Oklab, via Srgb);
215simple_from!(Lch to Oklch, via Srgb);
216simple_from!(Lch to XyzD50, via Srgb);
217simple_from!(Lch to XyzD65, via Srgb);
218
219simple_from!(Hsv to LinearRgb, via Srgb);
220simple_from!(Lab to LinearRgb, via XyzD50);
221simple_from!(Lch to LinearRgb, via Lab);
222simple_from!(Named to LinearRgb, via Srgb);
223simple_from!(Oklab to LinearRgb, via XyzD65);
224simple_from!(Oklch to LinearRgb, via Oklab);
225simple_from!(XyzD50 to LinearRgb, via XyzD65);
226
227simple_from!(LinearRgb to Hsv, via Srgb);
228simple_from!(LinearRgb to Lab, via XyzD50);
229simple_from!(LinearRgb to Lch, via Lab);
230simple_from!(LinearRgb to Oklab, via XyzD65);
231simple_from!(LinearRgb to Oklch, via Oklab);
232simple_from!(LinearRgb to XyzD50, via XyzD65);
233
234simple_from!(Named to Oklab, via Srgb);
235simple_from!(XyzD50 to Oklab, via XyzD65);
236
237simple_from!(Oklab to XyzD50, via XyzD65);
238
239simple_from!(Named to Oklch, via Srgb);
240simple_from!(XyzD50 to Oklch, via Oklab);
241simple_from!(XyzD65 to Oklch, via Oklab);
242
243simple_from!(Oklch to XyzD50, via Oklab);
244simple_from!(Oklch to XyzD65, via Oklab);
245
246simple_from!(Named to XyzD50, via Srgb);
247simple_from!(Named to XyzD65, via Srgb);
248
249simple_from!(Srgb to Lab, via XyzD50);
250simple_from!(Srgb to Lch, via Lab);
251simple_from!(Srgb to Oklab, via XyzD65);
252simple_from!(Srgb to Oklch, via Oklab);
253simple_from!(Srgb to XyzD50, via LinearRgb);
254simple_from!(Srgb to XyzD65, via LinearRgb);
255
256simple_from!(XyzD50 to Srgb, via XyzD65);
257simple_from!(XyzD65 to Srgb, via LinearRgb);
258simple_from!(Lab to Srgb, via XyzD50);
259simple_from!(Lch to Srgb, via Lab);
260simple_from!(Oklab to Srgb, via XyzD65);
261simple_from!(Oklch to Srgb, via Oklab);
262simple_from!(Hwb to Srgb, via Hsv);
263simple_from!(Srgb to Hwb, via Hsv);
264
265simple_from!(Color to A98Rgb, via XyzD65);
266simple_from!(Color to DisplayP3, via XyzD65);
267simple_from!(Color to Hsv, via XyzD65);
268simple_from!(Color to Hex, via XyzD65);
269simple_from!(Color to Hsl, via XyzD65);
270simple_from!(Color to Hwb, via XyzD65);
271simple_from!(Color to Lab, via XyzD65);
272simple_from!(Color to Lch, via XyzD65);
273simple_from!(Color to LinearRgb, via XyzD65);
274simple_from!(Color to Oklab, via XyzD65);
275simple_from!(Color to Oklch, via XyzD65);
276simple_from!(Color to ProphotoRgb, via XyzD65);
277simple_from!(Color to Rec2020, via XyzD65);
278
279impl From<Color> for Srgb {
281 fn from(value: Color) -> Self {
282 match value {
283 Color::DisplayP3(d) => {
284 let linear: LinearRgb = d.into();
285 linear.into()
286 }
287 other => {
288 let xyz: XyzD65 = other.into();
289 xyz.into()
290 }
291 }
292 }
293}
294
295simple_from!(Color to XyzD50, via XyzD65);
296
297macro_rules! impl_named_try_from_via_srgb {
298 ($($ty:path),+ $(,)?) => {
299 $(
300 impl TryFrom<$ty> for Named {
301 type Error = ToNamedError;
302
303 fn try_from(value: $ty) -> Result<Self, Self::Error> {
304 Self::try_from(Srgb::from(value))
305 }
306 }
307 )+
308 };
309}
310
311impl_named_try_from_via_srgb!(
312 crate::A98Rgb,
313 crate::DisplayP3,
314 crate::Hex,
315 crate::Hsv,
316 crate::Hsl,
317 crate::Hwb,
318 crate::Lab,
319 crate::Lch,
320 crate::LinearRgb,
321 crate::Oklab,
322 crate::Oklch,
323 crate::ProphotoRgb,
324 crate::Rec2020,
325 crate::XyzD50,
326 crate::XyzD65,
327 crate::Color,
328);
329
330#[cfg(feature = "anstyle")]
331simple_from!(Color to anstyle::RgbColor, via Srgb);
332#[cfg(feature = "anstyle")]
333simple_from!(A98Rgb to anstyle::RgbColor, via Srgb);
334#[cfg(feature = "anstyle")]
335simple_from!(DisplayP3 to anstyle::RgbColor, via Srgb);
336#[cfg(feature = "anstyle")]
337simple_from!(Hsv to anstyle::RgbColor, via Srgb);
338#[cfg(feature = "anstyle")]
339simple_from!(Hex to anstyle::RgbColor, via Srgb);
340#[cfg(feature = "anstyle")]
341simple_from!(Hsl to anstyle::RgbColor, via Srgb);
342#[cfg(feature = "anstyle")]
343simple_from!(Hwb to anstyle::RgbColor, via Srgb);
344#[cfg(feature = "anstyle")]
345simple_from!(Lab to anstyle::RgbColor, via Srgb);
346#[cfg(feature = "anstyle")]
347simple_from!(Lch to anstyle::RgbColor, via Srgb);
348#[cfg(feature = "anstyle")]
349simple_from!(LinearRgb to anstyle::RgbColor, via Srgb);
350#[cfg(feature = "anstyle")]
351simple_from!(Named to anstyle::RgbColor, via Srgb);
352#[cfg(feature = "anstyle")]
353simple_from!(Oklab to anstyle::RgbColor, via Srgb);
354#[cfg(feature = "anstyle")]
355simple_from!(Oklch to anstyle::RgbColor, via Srgb);
356#[cfg(feature = "anstyle")]
357simple_from!(ProphotoRgb to anstyle::RgbColor, via Srgb);
358#[cfg(feature = "anstyle")]
359simple_from!(Rec2020 to anstyle::RgbColor, via Srgb);
360#[cfg(feature = "anstyle")]
361simple_from!(XyzD50 to anstyle::RgbColor, via Srgb);
362#[cfg(feature = "anstyle")]
363simple_from!(XyzD65 to anstyle::RgbColor, via Srgb);
364
365#[cfg(feature = "anstyle")]
366simple_from!(Color to anstyle::Color, via anstyle::RgbColor);
367#[cfg(feature = "anstyle")]
368simple_from!(A98Rgb to anstyle::Color, via anstyle::RgbColor);
369#[cfg(feature = "anstyle")]
370simple_from!(DisplayP3 to anstyle::Color, via anstyle::RgbColor);
371#[cfg(feature = "anstyle")]
372simple_from!(Hsv to anstyle::Color, via anstyle::RgbColor);
373#[cfg(feature = "anstyle")]
374simple_from!(Hex to anstyle::Color, via anstyle::RgbColor);
375#[cfg(feature = "anstyle")]
376simple_from!(Hsl to anstyle::Color, via anstyle::RgbColor);
377#[cfg(feature = "anstyle")]
378simple_from!(Hwb to anstyle::Color, via anstyle::RgbColor);
379#[cfg(feature = "anstyle")]
380simple_from!(Lab to anstyle::Color, via anstyle::RgbColor);
381#[cfg(feature = "anstyle")]
382simple_from!(Lch to anstyle::Color, via anstyle::RgbColor);
383#[cfg(feature = "anstyle")]
384simple_from!(LinearRgb to anstyle::Color, via anstyle::RgbColor);
385#[cfg(feature = "anstyle")]
386simple_from!(Named to anstyle::Color, via anstyle::RgbColor);
387#[cfg(feature = "anstyle")]
388simple_from!(Oklab to anstyle::Color, via anstyle::RgbColor);
389#[cfg(feature = "anstyle")]
390simple_from!(Oklch to anstyle::Color, via anstyle::RgbColor);
391#[cfg(feature = "anstyle")]
392simple_from!(ProphotoRgb to anstyle::Color, via anstyle::RgbColor);
393#[cfg(feature = "anstyle")]
394simple_from!(Rec2020 to anstyle::Color, via anstyle::RgbColor);
395#[cfg(feature = "anstyle")]
396simple_from!(Srgb to anstyle::Color, via anstyle::RgbColor);
397#[cfg(feature = "anstyle")]
398simple_from!(XyzD50 to anstyle::Color, via anstyle::RgbColor);
399#[cfg(feature = "anstyle")]
400simple_from!(XyzD65 to anstyle::Color, via anstyle::RgbColor);
401
402#[cfg(feature = "owo-colors")]
403simple_from!(Color to owo_colors::Rgb, via Srgb);
404#[cfg(feature = "owo-colors")]
405simple_from!(A98Rgb to owo_colors::Rgb, via Srgb);
406#[cfg(feature = "owo-colors")]
407simple_from!(DisplayP3 to owo_colors::Rgb, via Srgb);
408#[cfg(feature = "owo-colors")]
409simple_from!(Hsv to owo_colors::Rgb, via Srgb);
410#[cfg(feature = "owo-colors")]
411simple_from!(Hex to owo_colors::Rgb, via Srgb);
412#[cfg(feature = "owo-colors")]
413simple_from!(Hsl to owo_colors::Rgb, via Srgb);
414#[cfg(feature = "owo-colors")]
415simple_from!(Hwb to owo_colors::Rgb, via Srgb);
416#[cfg(feature = "owo-colors")]
417simple_from!(Lab to owo_colors::Rgb, via Srgb);
418#[cfg(feature = "owo-colors")]
419simple_from!(Lch to owo_colors::Rgb, via Srgb);
420#[cfg(feature = "owo-colors")]
421simple_from!(LinearRgb to owo_colors::Rgb, via Srgb);
422#[cfg(feature = "owo-colors")]
423simple_from!(Named to owo_colors::Rgb, via Srgb);
424#[cfg(feature = "owo-colors")]
425simple_from!(Oklab to owo_colors::Rgb, via Srgb);
426#[cfg(feature = "owo-colors")]
427simple_from!(Oklch to owo_colors::Rgb, via Srgb);
428#[cfg(feature = "owo-colors")]
429simple_from!(ProphotoRgb to owo_colors::Rgb, via Srgb);
430#[cfg(feature = "owo-colors")]
431simple_from!(Rec2020 to owo_colors::Rgb, via Srgb);
432#[cfg(feature = "owo-colors")]
433simple_from!(XyzD50 to owo_colors::Rgb, via Srgb);
434#[cfg(feature = "owo-colors")]
435simple_from!(XyzD65 to owo_colors::Rgb, via Srgb);