rgb/legacy/internal/convert/
tuple.rs1
2use crate::formats::gray::Gray_v08;
3use crate::{Abgr, Argb, Bgr, Bgra, Grb, Rgb, Rgba, alt::GrayAlpha};
4
5#[cfg(feature = "unstable-experimental")]
6use crate::GrayA;
7#[cfg(feature = "unstable-experimental")]
8use crate::formats::gray::Gray_v09;
9
10macro_rules! tuple_conversion {
11 ($name:ident, 1, [$($bit:tt:$num:tt),*]) => {
12 impl<R, S> From<$name<R>> for (S,) where R: Into<S> {
13 #[allow(deprecated)]
14 fn from(value: $name<R>) -> Self {
15 ($(value.$bit.into()),*,)
16 }
17 }
18 };
19 ($name:ident, 2, [$($bit:tt:$num:tt),*]) => {
20 impl<R, S> From<$name<R>> for (S, S) where R: Into<S> {
21 #[allow(deprecated)]
22 fn from(value: $name<R>) -> Self {
23 ($(value.$bit.into()),*)
24 }
25 }
26 impl<R, S> From<(R, R)> for $name<S> where R: Into<S> {
27 #[allow(deprecated)]
28 fn from(value: (R, R)) -> Self {
29 Self{$($bit: value.$num.into()),*}
30 }
31 }
32 };
33 ($name:ident, 3, [$($bit:tt:$num:tt),*]) => {
34 impl<R, S> From<$name<R>> for (S, S, S) where R: Into<S> {
35 fn from(value: $name<R>) -> Self {
36 ($(value.$bit.into()),*)
37 }
38 }
39 impl<R, S> From<(R, R, R)> for $name<S> where R: Into<S> {
40 fn from(value: (R, R, R)) -> Self {
41 Self{$($bit: value.$num.into()),*}
42 }
43 }
44 };
45 ($name:ident, 4, [$($bit:tt:$num:tt),*]) => {
46 impl<R, S> From<$name<R>> for (S, S, S, S) where R: Into<S> {
47 fn from(value: $name<R>) -> Self {
48 ($(value.$bit.into()),*)
49 }
50 }
51 impl<R, S> From<(R, R, R, R)> for $name<S> where R: Into<S> {
52 fn from(value: (R, R, R, R)) -> Self {
53 Self{$($bit: value.$num.into()),*}
54 }
55 }
56 };
57}
58
59
60tuple_conversion!(Rgb, 3, [r:0, g:1, b:2]);
61tuple_conversion!(Bgr, 3, [b:0, g:1, r:2]);
62tuple_conversion!(Grb, 3, [g:0, r:1, b:2]);
63#[cfg(feature = "unstable-experimental")]
64tuple_conversion!(Gray_v09, 1, [v:0]);
65
66
67tuple_conversion!(Rgba, 4, [r:0, g:1, b:2, a:3]);
68tuple_conversion!(Argb, 4, [a:0, r:1, g:2, b:3]);
69tuple_conversion!(Bgra, 4, [b:0, g:1, r:2, a:3]);
70tuple_conversion!(Abgr, 4, [a:0, b:1, g:2, r:3]);
71#[cfg(feature = "unstable-experimental")]
72tuple_conversion!(GrayA, 2, [v:0, a:1]);
73
74tuple_conversion!(Gray_v08, 1, [0:0]);
75tuple_conversion!(GrayAlpha, 2, [0:0, 1:1]);
76
77#[test]
78fn converts() {
79 assert_eq!((1,2,3), Rgb {r:1u8,g:2,b:3}.into());
80 assert_eq!(Rgb {r:1u8,g:2,b:3}, (1,2,3).into());
81 assert_eq!((1,2,3,4), Rgba {r:1,g:2,b:3,a:4}.into());
82 assert_eq!(Rgba {r:1u8,g:2,b:3,a:4}, (1,2,3,4).into());
83 assert_eq!(Bgra {r:1u8,g:2,b:3,a:4}, (3,2,1,4).into());
84 assert_eq!(Bgr {r:1u8,g:2,b:3}, (3,2,1).into());
85}