chromashift 0.0.31

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

macro_rules! simple_from {
	($from: ident to $to: ty, via $int: ty) => {
		impl From<$from> for $to {
			fn from(value: $from) -> Self {
				let intermediary: $int = value.into();
				intermediary.into()
			}
		}
	};
}

simple_from!(Hsv to A98Rgb, via Srgb);
simple_from!(Hex to A98Rgb, via Srgb);
simple_from!(Hsl to A98Rgb, via Srgb);
simple_from!(Hwb to A98Rgb, via Hsv);
simple_from!(Lab to A98Rgb, via XyzD50);
simple_from!(Lch to A98Rgb, via Lab);
simple_from!(Named to A98Rgb, via Srgb);
simple_from!(Oklab to A98Rgb, via XyzD65);
simple_from!(Oklch to A98Rgb, via Oklab);
simple_from!(Srgb to A98Rgb, via LinearRgb);
simple_from!(XyzD50 to A98Rgb, via XyzD65);
simple_from!(XyzD65 to A98Rgb, via LinearRgb);

simple_from!(A98Rgb to Hsv, via LinearRgb);
simple_from!(A98Rgb to Hex, via Srgb);
simple_from!(A98Rgb to Hsl, via LinearRgb);
simple_from!(A98Rgb to Hwb, via LinearRgb);
simple_from!(A98Rgb to Lab, via LinearRgb);
simple_from!(A98Rgb to Lch, via LinearRgb);
simple_from!(A98Rgb to Oklab, via LinearRgb);
simple_from!(A98Rgb to Oklch, via LinearRgb);
simple_from!(A98Rgb to Srgb, via LinearRgb);
simple_from!(A98Rgb to XyzD50, via LinearRgb);
simple_from!(A98Rgb to XyzD65, via LinearRgb);

// DisplayP3 converts through LinearRgb
simple_from!(A98Rgb to DisplayP3, via LinearRgb);
simple_from!(Hex to DisplayP3, via LinearRgb);
simple_from!(Hsv to DisplayP3, via LinearRgb);
simple_from!(Hsl to DisplayP3, via LinearRgb);
simple_from!(Hwb to DisplayP3, via LinearRgb);
simple_from!(Lab to DisplayP3, via LinearRgb);
simple_from!(Lch to DisplayP3, via LinearRgb);
// LinearRgb to DisplayP3 is implemented directly
simple_from!(Named to DisplayP3, via LinearRgb);
simple_from!(Oklab to DisplayP3, via LinearRgb);
simple_from!(Oklch to DisplayP3, via LinearRgb);
simple_from!(Srgb to DisplayP3, via LinearRgb);
simple_from!(XyzD50 to DisplayP3, via XyzD65);

simple_from!(DisplayP3 to A98Rgb, via LinearRgb);
simple_from!(DisplayP3 to Hex, via LinearRgb);
simple_from!(DisplayP3 to Hsv, via LinearRgb);
simple_from!(DisplayP3 to Hsl, via LinearRgb);
simple_from!(DisplayP3 to Hwb, via LinearRgb);
simple_from!(DisplayP3 to Lab, via LinearRgb);
simple_from!(DisplayP3 to Lch, via LinearRgb);
// DisplayP3 to LinearRgb is implemented directly
simple_from!(DisplayP3 to Oklab, via LinearRgb);
simple_from!(DisplayP3 to Oklch, via LinearRgb);
simple_from!(DisplayP3 to Srgb, via LinearRgb);
simple_from!(DisplayP3 to XyzD50, via LinearRgb);
simple_from!(DisplayP3 to ProphotoRgb, via XyzD65);
simple_from!(DisplayP3 to Rec2020, via XyzD65);

// ProphotoRgb converts through XyzD50
simple_from!(A98Rgb to ProphotoRgb, via XyzD50);
simple_from!(Hex to ProphotoRgb, via XyzD50);
simple_from!(Hsv to ProphotoRgb, via XyzD50);
simple_from!(Hsl to ProphotoRgb, via XyzD50);
simple_from!(Hwb to ProphotoRgb, via XyzD50);
simple_from!(Lab to ProphotoRgb, via XyzD50);
simple_from!(Lch to ProphotoRgb, via XyzD50);
simple_from!(LinearRgb to ProphotoRgb, via XyzD50);
simple_from!(Named to ProphotoRgb, via XyzD50);
simple_from!(Oklab to ProphotoRgb, via XyzD50);
simple_from!(Oklch to ProphotoRgb, via XyzD50);
simple_from!(Srgb to ProphotoRgb, via XyzD50);
simple_from!(XyzD65 to ProphotoRgb, via XyzD50);

simple_from!(ProphotoRgb to A98Rgb, via XyzD50);
simple_from!(ProphotoRgb to Hex, via XyzD50);
simple_from!(ProphotoRgb to Hsv, via XyzD50);
simple_from!(ProphotoRgb to Hsl, via XyzD50);
simple_from!(ProphotoRgb to Hwb, via XyzD50);
simple_from!(ProphotoRgb to Lab, via XyzD50);
simple_from!(ProphotoRgb to Lch, via XyzD50);
simple_from!(ProphotoRgb to LinearRgb, via XyzD50);
simple_from!(ProphotoRgb to Oklab, via XyzD50);
simple_from!(ProphotoRgb to Oklch, via XyzD50);
simple_from!(ProphotoRgb to Srgb, via XyzD50);
simple_from!(ProphotoRgb to XyzD65, via XyzD50);
simple_from!(ProphotoRgb to Rec2020, via XyzD50);

// Rec2020 converts through XyzD65
simple_from!(A98Rgb to Rec2020, via XyzD65);
simple_from!(Hex to Rec2020, via XyzD65);
simple_from!(Hsv to Rec2020, via XyzD65);
simple_from!(Hsl to Rec2020, via XyzD65);
simple_from!(Hwb to Rec2020, via XyzD65);
simple_from!(Lab to Rec2020, via XyzD65);
simple_from!(Lch to Rec2020, via XyzD65);
simple_from!(LinearRgb to Rec2020, via XyzD65);
simple_from!(Named to Rec2020, via XyzD65);
simple_from!(Oklab to Rec2020, via XyzD65);
simple_from!(Oklch to Rec2020, via XyzD65);
simple_from!(Srgb to Rec2020, via XyzD65);
simple_from!(XyzD50 to Rec2020, via XyzD65);

simple_from!(Rec2020 to A98Rgb, via XyzD65);
simple_from!(Rec2020 to Hex, via XyzD65);
simple_from!(Rec2020 to Hsv, via XyzD65);
simple_from!(Rec2020 to Hsl, via XyzD65);
simple_from!(Rec2020 to Hwb, via XyzD65);
simple_from!(Rec2020 to Lab, via XyzD65);
simple_from!(Rec2020 to Lch, via XyzD65);
simple_from!(Rec2020 to LinearRgb, via XyzD65);
simple_from!(Rec2020 to Oklab, via XyzD65);
simple_from!(Rec2020 to Oklch, via XyzD65);
simple_from!(Rec2020 to Srgb, via XyzD65);
simple_from!(Rec2020 to XyzD50, via XyzD65);
simple_from!(Rec2020 to ProphotoRgb, via XyzD65);

simple_from!(Hsv to Hex, via Srgb);
simple_from!(Hsl to Hex, via Srgb);
simple_from!(Hwb to Hex, via Srgb);
simple_from!(Lab to Hex, via Srgb);
simple_from!(Lch to Hex, via Srgb);
simple_from!(LinearRgb to Hex, via Srgb);
simple_from!(Named to Hex, via Srgb);
simple_from!(Oklab to Hex, via XyzD65);
simple_from!(Oklch to Hex, via Oklab);
simple_from!(XyzD50 to Hex, via XyzD65);
simple_from!(XyzD65 to Hex, via Srgb);

simple_from!(Hex to Hsv, via Srgb);
simple_from!(Hex to Hsl, via Srgb);
simple_from!(Hex to Hwb, via Srgb);
simple_from!(Hex to Lab, via Srgb);
simple_from!(Hex to Lch, via Srgb);
simple_from!(Hex to LinearRgb, via Srgb);
simple_from!(Hex to Oklab, via XyzD65);
simple_from!(Hex to Oklch, via Oklab);
simple_from!(Hex to XyzD50, via XyzD65);
simple_from!(Hex to XyzD65, via Srgb);

simple_from!(Hsl to Hsv, via Srgb);
simple_from!(Lab to Hsv, via Srgb);
simple_from!(Lch to Hsv, via Srgb);
simple_from!(Named to Hsv, via Srgb);
simple_from!(Oklab to Hsv, via XyzD65);
simple_from!(Oklch to Hsv, via Oklab);
simple_from!(XyzD50 to Hsv, via XyzD65);
simple_from!(XyzD65 to Hsv, via Srgb);

simple_from!(Hsv to Hsl, via Srgb);
simple_from!(Hsv to Lab, via Srgb);
simple_from!(Hsv to Lch, via Srgb);
simple_from!(Hsv to Oklab, via Srgb);
simple_from!(Hsv to Oklch, via Srgb);
simple_from!(Hsv to XyzD50, via Srgb);
simple_from!(Hsv to XyzD65, via Srgb);

simple_from!(Hwb to Hsl, via LinearRgb);
simple_from!(Lab to Hsl, via LinearRgb);
simple_from!(Lch to Hsl, via LinearRgb);
simple_from!(Named to Hsl, via Srgb);
simple_from!(Oklab to Hsl, via LinearRgb);
simple_from!(Oklch to Hsl, via LinearRgb);
simple_from!(XyzD50 to Hsl, via LinearRgb);
simple_from!(XyzD65 to Hsl, via LinearRgb);

simple_from!(Hsl to Hwb, via LinearRgb);
simple_from!(Hsl to Lab, via LinearRgb);
simple_from!(Hsl to Lch, via LinearRgb);
simple_from!(Hsl to Oklab, via LinearRgb);
simple_from!(Hsl to Oklch, via LinearRgb);
simple_from!(Hsl to XyzD50, via LinearRgb);
simple_from!(Hsl to XyzD65, via LinearRgb);

simple_from!(Lab to Hwb, via LinearRgb);
simple_from!(Lch to Hwb, via LinearRgb);
simple_from!(Named to Hwb, via Srgb);
simple_from!(Oklab to Hwb, via LinearRgb);
simple_from!(Oklch to Hwb, via LinearRgb);
simple_from!(XyzD50 to Hwb, via LinearRgb);
simple_from!(XyzD65 to Hwb, via LinearRgb);

simple_from!(Hwb to Lab, via LinearRgb);
simple_from!(Hwb to Lch, via LinearRgb);
simple_from!(Hwb to Oklab, via LinearRgb);
simple_from!(Hwb to Oklch, via LinearRgb);
simple_from!(Hwb to XyzD50, via LinearRgb);
simple_from!(Hwb to XyzD65, via LinearRgb);

simple_from!(Named to Lab, via Srgb);
simple_from!(Oklab to Lab, via Srgb);
simple_from!(Oklch to Lab, via Srgb);
simple_from!(XyzD65 to Lab, via Srgb);

simple_from!(Lab to Oklab, via XyzD50);
simple_from!(Lab to Oklch, via XyzD50);
simple_from!(Lab to XyzD65, via XyzD50);

simple_from!(Named to Lch, via Srgb);
simple_from!(Oklab to Lch, via Srgb);
simple_from!(Oklch to Lch, via Srgb);
simple_from!(XyzD50 to Lch, via Srgb);
simple_from!(XyzD65 to Lch, via Srgb);

simple_from!(Lch to Oklab, via Srgb);
simple_from!(Lch to Oklch, via Srgb);
simple_from!(Lch to XyzD50, via Lab);
simple_from!(Lch to XyzD65, via Lab);

simple_from!(Hsv to LinearRgb, via Srgb);
simple_from!(Lab to LinearRgb, via XyzD50);
simple_from!(Lch to LinearRgb, via Lab);
simple_from!(Named to LinearRgb, via Srgb);
simple_from!(Oklab to LinearRgb, via XyzD65);
simple_from!(Oklch to LinearRgb, via Oklab);
simple_from!(XyzD50 to LinearRgb, via XyzD65);

simple_from!(LinearRgb to Hsv, via Srgb);
simple_from!(LinearRgb to Lab, via XyzD50);
simple_from!(LinearRgb to Lch, via Lab);
simple_from!(LinearRgb to Oklab, via XyzD65);
simple_from!(LinearRgb to Oklch, via Oklab);
simple_from!(LinearRgb to XyzD50, via XyzD65);

simple_from!(Named to Oklab, via Srgb);
simple_from!(XyzD50 to Oklab, via XyzD65);

simple_from!(Oklab to XyzD50, via XyzD65);

simple_from!(Named to Oklch, via Srgb);
simple_from!(XyzD50 to Oklch, via Oklab);
simple_from!(XyzD65 to Oklch, via Oklab);

simple_from!(Oklch to XyzD50, via Oklab);
simple_from!(Oklch to XyzD65, via Oklab);

simple_from!(Named to XyzD50, via Srgb);
simple_from!(Named to XyzD65, via Srgb);

simple_from!(Srgb to Lab, via XyzD50);
simple_from!(Srgb to Lch, via Lab);
simple_from!(Srgb to Oklab, via XyzD65);
simple_from!(Srgb to Oklch, via Oklab);
simple_from!(Srgb to XyzD50, via LinearRgb);
simple_from!(Srgb to XyzD65, via LinearRgb);

simple_from!(XyzD50 to Srgb, via XyzD65);
simple_from!(XyzD65 to Srgb, via LinearRgb);
simple_from!(Lab to Srgb, via XyzD50);
simple_from!(Lch to Srgb, via Lab);
simple_from!(Oklab to Srgb, via XyzD65);
simple_from!(Oklch to Srgb, via Oklab);
simple_from!(Hwb to Srgb, via Hsv);
simple_from!(Srgb to Hwb, via Hsv);

simple_from!(Color to A98Rgb, via XyzD65);
simple_from!(Color to DisplayP3, via XyzD65);
simple_from!(Color to Hsv, via XyzD65);
simple_from!(Color to Hex, via XyzD65);
simple_from!(Color to Hsl, via XyzD65);
simple_from!(Color to Hwb, via XyzD65);
simple_from!(Color to Lab, via XyzD65);
simple_from!(Color to Lch, via XyzD65);
simple_from!(Color to LinearRgb, via XyzD65);
simple_from!(Color to Oklab, via XyzD65);
simple_from!(Color to Oklch, via XyzD65);
simple_from!(Color to ProphotoRgb, via XyzD65);
simple_from!(Color to Rec2020, via XyzD65);

// Color to Srgb: route DisplayP3 through LinearRgb
impl From<Color> for Srgb {
	fn from(value: Color) -> Self {
		match value {
			Color::DisplayP3(d) => {
				let linear: LinearRgb = d.into();
				linear.into()
			}
			other => {
				let xyz: XyzD65 = other.into();
				xyz.into()
			}
		}
	}
}

simple_from!(Color to XyzD50, via XyzD65);

macro_rules! impl_named_try_from_via_srgb {
	($($ty:path),+ $(,)?) => {
		$(
			impl TryFrom<$ty> for Named {
				type Error = ToNamedError;

				fn try_from(value: $ty) -> Result<Self, Self::Error> {
					Self::try_from(Srgb::from(value))
				}
			}
		)+
	};
}

impl_named_try_from_via_srgb!(
	crate::A98Rgb,
	crate::DisplayP3,
	crate::Hex,
	crate::Hsv,
	crate::Hsl,
	crate::Hwb,
	crate::Lab,
	crate::Lch,
	crate::LinearRgb,
	crate::Oklab,
	crate::Oklch,
	crate::ProphotoRgb,
	crate::Rec2020,
	crate::XyzD50,
	crate::XyzD65,
	crate::Color,
);

#[cfg(feature = "anstyle")]
simple_from!(Color to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(A98Rgb to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(DisplayP3 to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Hsv to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Hex to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Hsl to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Hwb to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Lab to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Lch to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(LinearRgb to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Named to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Oklab to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Oklch to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(ProphotoRgb to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(Rec2020 to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(XyzD50 to anstyle::RgbColor, via Srgb);
#[cfg(feature = "anstyle")]
simple_from!(XyzD65 to anstyle::RgbColor, via Srgb);

#[cfg(feature = "anstyle")]
simple_from!(Color to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(A98Rgb to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(DisplayP3 to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Hsv to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Hex to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Hsl to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Hwb to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Lab to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Lch to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(LinearRgb to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Named to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Oklab to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Oklch to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(ProphotoRgb to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Rec2020 to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(Srgb to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(XyzD50 to anstyle::Color, via anstyle::RgbColor);
#[cfg(feature = "anstyle")]
simple_from!(XyzD65 to anstyle::Color, via anstyle::RgbColor);

#[cfg(feature = "owo-colors")]
simple_from!(Color to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(A98Rgb to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(DisplayP3 to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Hsv to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Hex to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Hsl to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Hwb to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Lab to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Lch to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(LinearRgb to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Named to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Oklab to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Oklch to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(ProphotoRgb to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(Rec2020 to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(XyzD50 to owo_colors::Rgb, via Srgb);
#[cfg(feature = "owo-colors")]
simple_from!(XyzD65 to owo_colors::Rgb, via Srgb);