Skip to main content

chromashift/
conversion.rs

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