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!(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!(Hsv to Hex, via Srgb);
40simple_from!(Hsl to Hex, via Srgb);
41simple_from!(Hwb to Hex, via Srgb);
42simple_from!(Lab to Hex, via Srgb);
43simple_from!(Lch to Hex, via Srgb);
44simple_from!(LinearRgb to Hex, via Srgb);
45simple_from!(Named to Hex, via Srgb);
46simple_from!(Oklab to Hex, via XyzD65);
47simple_from!(Oklch to Hex, via Oklab);
48simple_from!(XyzD50 to Hex, via XyzD65);
49simple_from!(XyzD65 to Hex, via Srgb);
50
51simple_from!(Hex to Hsv, via Srgb);
52simple_from!(Hex to Hsl, via Srgb);
53simple_from!(Hex to Hwb, via Srgb);
54simple_from!(Hex to Lab, via Srgb);
55simple_from!(Hex to Lch, via Srgb);
56simple_from!(Hex to LinearRgb, via Srgb);
57simple_from!(Hex to Oklab, via XyzD65);
58simple_from!(Hex to Oklch, via Oklab);
59simple_from!(Hex to XyzD50, via XyzD65);
60simple_from!(Hex to XyzD65, via Srgb);
61
62simple_from!(Hsl to Hsv, via Srgb);
63simple_from!(Lab to Hsv, via Srgb);
64simple_from!(Lch to Hsv, via Srgb);
65simple_from!(Named to Hsv, via Srgb);
66simple_from!(Oklab to Hsv, via XyzD65);
67simple_from!(Oklch to Hsv, via Oklab);
68simple_from!(XyzD50 to Hsv, via XyzD65);
69simple_from!(XyzD65 to Hsv, via Srgb);
70
71simple_from!(Hsv to Hsl, via Srgb);
72simple_from!(Hsv to Lab, via Srgb);
73simple_from!(Hsv to Lch, via Srgb);
74simple_from!(Hsv to Oklab, via Srgb);
75simple_from!(Hsv to Oklch, via Srgb);
76simple_from!(Hsv to XyzD50, via Srgb);
77simple_from!(Hsv to XyzD65, via Srgb);
78
79simple_from!(Hwb to Hsl, via Hsv);
80simple_from!(Lab to Hsl, via Srgb);
81simple_from!(Lch to Hsl, via Srgb);
82simple_from!(Named to Hsl, via Srgb);
83simple_from!(Oklab to Hsl, via Srgb);
84simple_from!(Oklch to Hsl, via Srgb);
85simple_from!(XyzD50 to Hsl, via Srgb);
86simple_from!(XyzD65 to Hsl, via Srgb);
87
88simple_from!(Hsl to Hwb, via Srgb);
89simple_from!(Hsl to Lab, via Srgb);
90simple_from!(Hsl to Lch, via Srgb);
91simple_from!(Hsl to Oklab, via Srgb);
92simple_from!(Hsl to Oklch, via Srgb);
93simple_from!(Hsl to XyzD50, via Srgb);
94simple_from!(Hsl to XyzD65, via Srgb);
95
96simple_from!(Lab to Hwb, via Srgb);
97simple_from!(Lch to Hwb, via Srgb);
98simple_from!(Named to Hwb, via Srgb);
99simple_from!(Oklab to Hwb, via Srgb);
100simple_from!(Oklch to Hwb, via Srgb);
101simple_from!(XyzD50 to Hwb, via Srgb);
102simple_from!(XyzD65 to Hwb, via Srgb);
103
104simple_from!(Hwb to Lab, via Srgb);
105simple_from!(Hwb to Lch, via Srgb);
106simple_from!(Hwb to Oklab, via Srgb);
107simple_from!(Hwb to Oklch, via Srgb);
108simple_from!(Hwb to XyzD50, via Srgb);
109simple_from!(Hwb to XyzD65, via Srgb);
110
111simple_from!(Named to Lab, via Srgb);
112simple_from!(Oklab to Lab, via Srgb);
113simple_from!(Oklch to Lab, via Srgb);
114simple_from!(XyzD65 to Lab, via Srgb);
115
116simple_from!(Lab to Oklab, via XyzD50);
117simple_from!(Lab to Oklch, via XyzD50);
118simple_from!(Lab to XyzD65, via XyzD50);
119
120simple_from!(Named to Lch, via Srgb);
121simple_from!(Oklab to Lch, via Srgb);
122simple_from!(Oklch to Lch, via Srgb);
123simple_from!(XyzD50 to Lch, via Srgb);
124simple_from!(XyzD65 to Lch, via Srgb);
125
126simple_from!(Lch to Oklab, via Srgb);
127simple_from!(Lch to Oklch, via Srgb);
128simple_from!(Lch to XyzD50, via Srgb);
129simple_from!(Lch to XyzD65, via Srgb);
130
131simple_from!(Hsv to LinearRgb, via Srgb);
132simple_from!(Hsl to LinearRgb, via Srgb);
133simple_from!(Hwb to LinearRgb, via Srgb);
134simple_from!(Lab to LinearRgb, via XyzD50);
135simple_from!(Lch to LinearRgb, via Lab);
136simple_from!(Named to LinearRgb, via Srgb);
137simple_from!(Oklab to LinearRgb, via XyzD65);
138simple_from!(Oklch to LinearRgb, via Oklab);
139simple_from!(XyzD50 to LinearRgb, via XyzD65);
140
141simple_from!(LinearRgb to Hsv, via Srgb);
142simple_from!(LinearRgb to Hsl, via Srgb);
143simple_from!(LinearRgb to Hwb, via Srgb);
144simple_from!(LinearRgb to Lab, via XyzD50);
145simple_from!(LinearRgb to Lch, via Lab);
146simple_from!(LinearRgb to Oklab, via XyzD65);
147simple_from!(LinearRgb to Oklch, via Oklab);
148simple_from!(LinearRgb to XyzD50, via XyzD65);
149
150simple_from!(Named to Oklab, via Srgb);
151simple_from!(XyzD50 to Oklab, via XyzD65);
152
153simple_from!(Oklab to XyzD50, via XyzD65);
154
155simple_from!(Named to Oklch, via Srgb);
156simple_from!(XyzD50 to Oklch, via Oklab);
157simple_from!(XyzD65 to Oklch, via Oklab);
158
159simple_from!(Oklch to XyzD50, via Oklab);
160simple_from!(Oklch to XyzD65, via Oklab);
161
162simple_from!(Named to XyzD50, via Srgb);
163simple_from!(Named to XyzD65, via Srgb);
164
165simple_from!(Srgb to Lab, via XyzD50);
166simple_from!(Srgb to Lch, via Lab);
167simple_from!(Srgb to Oklab, via XyzD65);
168simple_from!(Srgb to Oklch, via Oklab);
169simple_from!(Srgb to XyzD50, via LinearRgb);
170simple_from!(Srgb to XyzD65, via LinearRgb);
171
172simple_from!(XyzD50 to Srgb, via XyzD65);
173simple_from!(XyzD65 to Srgb, via LinearRgb);
174simple_from!(Lab to Srgb, via XyzD50);
175simple_from!(Lch to Srgb, via Lab);
176simple_from!(Oklab to Srgb, via XyzD65);
177simple_from!(Oklch to Srgb, via Oklab);
178simple_from!(Hwb to Srgb, via Hsv);
179simple_from!(Srgb to Hwb, via Hsv);
180
181simple_from!(Color to A98Rgb, via XyzD65);
182simple_from!(Color to Hsv, via XyzD65);
183simple_from!(Color to Hex, via XyzD65);
184simple_from!(Color to Hsl, via XyzD65);
185simple_from!(Color to Hwb, via XyzD65);
186simple_from!(Color to Lab, via XyzD65);
187simple_from!(Color to Lch, via XyzD65);
188simple_from!(Color to LinearRgb, via XyzD65);
189simple_from!(Color to Oklab, via XyzD65);
190simple_from!(Color to Oklch, via XyzD65);
191simple_from!(Color to Srgb, via XyzD65);
192simple_from!(Color to XyzD50, via XyzD65);
193
194macro_rules! impl_named_try_from_via_srgb {
195	($($ty:path),+ $(,)?) => {
196		$(
197			impl TryFrom<$ty> for Named {
198				type Error = ToNamedError;
199
200				fn try_from(value: $ty) -> Result<Self, Self::Error> {
201					Self::try_from(Srgb::from(value))
202				}
203			}
204		)+
205	};
206}
207
208impl_named_try_from_via_srgb!(
209	crate::A98Rgb,
210	crate::Hex,
211	crate::Hsv,
212	crate::Hsl,
213	crate::Hwb,
214	crate::Lab,
215	crate::Lch,
216	crate::LinearRgb,
217	crate::Oklab,
218	crate::Oklch,
219	crate::XyzD50,
220	crate::XyzD65,
221	crate::Color,
222);
223
224#[cfg(feature = "anstyle")]
225simple_from!(Color to anstyle::RgbColor, via Srgb);
226#[cfg(feature = "anstyle")]
227simple_from!(A98Rgb to anstyle::RgbColor, via Srgb);
228#[cfg(feature = "anstyle")]
229simple_from!(Hsv to anstyle::RgbColor, via Srgb);
230#[cfg(feature = "anstyle")]
231simple_from!(Hex to anstyle::RgbColor, via Srgb);
232#[cfg(feature = "anstyle")]
233simple_from!(Hsl to anstyle::RgbColor, via Srgb);
234#[cfg(feature = "anstyle")]
235simple_from!(Hwb to anstyle::RgbColor, via Srgb);
236#[cfg(feature = "anstyle")]
237simple_from!(Lab to anstyle::RgbColor, via Srgb);
238#[cfg(feature = "anstyle")]
239simple_from!(Lch to anstyle::RgbColor, via Srgb);
240#[cfg(feature = "anstyle")]
241simple_from!(LinearRgb to anstyle::RgbColor, via Srgb);
242#[cfg(feature = "anstyle")]
243simple_from!(Named to anstyle::RgbColor, via Srgb);
244#[cfg(feature = "anstyle")]
245simple_from!(Oklab to anstyle::RgbColor, via Srgb);
246#[cfg(feature = "anstyle")]
247simple_from!(Oklch to anstyle::RgbColor, via Srgb);
248#[cfg(feature = "anstyle")]
249simple_from!(XyzD50 to anstyle::RgbColor, via Srgb);
250#[cfg(feature = "anstyle")]
251simple_from!(XyzD65 to anstyle::RgbColor, via Srgb);
252
253#[cfg(feature = "anstyle")]
254simple_from!(Color to anstyle::Color, via anstyle::RgbColor);
255#[cfg(feature = "anstyle")]
256simple_from!(A98Rgb to anstyle::Color, via anstyle::RgbColor);
257#[cfg(feature = "anstyle")]
258simple_from!(Hsv to anstyle::Color, via anstyle::RgbColor);
259#[cfg(feature = "anstyle")]
260simple_from!(Hex to anstyle::Color, via anstyle::RgbColor);
261#[cfg(feature = "anstyle")]
262simple_from!(Hsl to anstyle::Color, via anstyle::RgbColor);
263#[cfg(feature = "anstyle")]
264simple_from!(Hwb to anstyle::Color, via anstyle::RgbColor);
265#[cfg(feature = "anstyle")]
266simple_from!(Lab to anstyle::Color, via anstyle::RgbColor);
267#[cfg(feature = "anstyle")]
268simple_from!(Lch to anstyle::Color, via anstyle::RgbColor);
269#[cfg(feature = "anstyle")]
270simple_from!(LinearRgb to anstyle::Color, via anstyle::RgbColor);
271#[cfg(feature = "anstyle")]
272simple_from!(Named to anstyle::Color, via anstyle::RgbColor);
273#[cfg(feature = "anstyle")]
274simple_from!(Oklab to anstyle::Color, via anstyle::RgbColor);
275#[cfg(feature = "anstyle")]
276simple_from!(Oklch to anstyle::Color, via anstyle::RgbColor);
277#[cfg(feature = "anstyle")]
278simple_from!(Srgb to anstyle::Color, via anstyle::RgbColor);
279#[cfg(feature = "anstyle")]
280simple_from!(XyzD50 to anstyle::Color, via anstyle::RgbColor);
281#[cfg(feature = "anstyle")]
282simple_from!(XyzD65 to anstyle::Color, via anstyle::RgbColor);