1 use crate::alt::BGR;
2 use crate::alt::BGRA;
3 use crate::RGB;
4 use crate::RGBA;
5 use core::convert::*;
6
7 impl<T> From<(T,T,T)> for RGB<T> {
8 #[inline]
from(other: (T,T,T)) -> Self9 fn from(other: (T,T,T)) -> Self {
10 Self {
11 r: other.0,
12 g: other.1,
13 b: other.2,
14 }
15 }
16 }
17
18 impl<T> Into<(T,T,T)> for RGB<T> {
19 #[inline]
into(self) -> (T,T,T)20 fn into(self) -> (T,T,T) {
21 (self.r, self.g, self.b)
22 }
23 }
24
25 impl<T,A> From<(T,T,T,A)> for RGBA<T,A> {
26 #[inline]
from(other: (T,T,T,A)) -> Self27 fn from(other: (T,T,T,A)) -> Self {
28 Self {
29 r: other.0,
30 g: other.1,
31 b: other.2,
32 a: other.3,
33 }
34 }
35 }
36
37 impl<T,A> Into<(T,T,T,A)> for RGBA<T,A> {
38 #[inline]
into(self) -> (T,T,T,A)39 fn into(self) -> (T,T,T,A) {
40 (self.r, self.g, self.b, self.a)
41 }
42 }
43
44 impl<T> From<(T,T,T)> for BGR<T> {
45 #[inline(always)]
from(other: (T,T,T)) -> Self46 fn from(other: (T,T,T)) -> Self {
47 Self {
48 b: other.0,
49 g: other.1,
50 r: other.2,
51 }
52 }
53 }
54
55 impl<T> Into<(T,T,T)> for BGR<T> {
56 #[inline(always)]
into(self) -> (T,T,T)57 fn into(self) -> (T,T,T) {
58 (self.b, self.g, self.r)
59 }
60 }
61
62 impl<T,A> From<(T,T,T,A)> for BGRA<T,A> {
63 #[inline(always)]
from(other: (T,T,T,A)) -> Self64 fn from(other: (T,T,T,A)) -> Self {
65 Self {
66 b: other.0,
67 g: other.1,
68 r: other.2,
69 a: other.3,
70 }
71 }
72 }
73
74 impl<T,A> Into<(T,T,T,A)> for BGRA<T,A> {
75 #[inline(always)]
into(self) -> (T,T,T,A)76 fn into(self) -> (T,T,T,A) {
77 (self.b, self.g, self.r, self.a)
78 }
79 }
80
81 #[test]
converts()82 fn converts() {
83 assert_eq!((1,2,3), RGB {r:1u8,g:2,b:3}.into());
84 assert_eq!(RGB {r:1u8,g:2,b:3}, (1,2,3).into());
85 assert_eq!((1,2,3,4), RGBA {r:1,g:2,b:3,a:4}.into());
86 assert_eq!(RGBA {r:1u8,g:2,b:3,a:4}, (1,2,3,4).into());
87 assert_eq!(BGRA {r:1u8,g:2,b:3,a:4}, (3,2,1,4).into());
88 assert_eq!(BGR {r:1u8,g:2,b:3}, (3,2,1).into());
89 }
90