1macro_rules! impl_reference_component_methods {
2 ( $self_ty: ident , [$($element: ident),+] $(, $phantom: ident)?) => {
3 impl_reference_component_methods!($self_ty<>, [$($element),+] $(, $phantom)?);
4 };
5 ( $self_ty: ident < $($phantom_ty: ident)? > , [$($element: ident),+] $(, $phantom: ident)?) => {
6 impl<$($phantom_ty,)? T> $self_ty<$($phantom_ty,)? &T> {
7 #[inline]
9 pub fn copied(&self) -> $self_ty<$($phantom_ty,)? T>
10 where
11 T: Copy,
12 {
13 $self_ty {
14 $($element: *self.$element,)+
15 $($phantom: core::marker::PhantomData,)?
16 }
17 }
18
19 #[inline]
21 pub fn cloned(&self) -> $self_ty<$($phantom_ty,)? T>
22 where
23 T: Clone,
24 {
25 $self_ty {
26 $($element: self.$element.clone(),)+
27 $($phantom: core::marker::PhantomData,)?
28 }
29 }
30 }
31
32 impl<$($phantom_ty,)? T> $self_ty<$($phantom_ty,)? &mut T> {
33 #[inline]
35 pub fn set(&mut self, value: $self_ty<$($phantom_ty,)? T>) {
36 $(*self.$element = value.$element;)+
37 }
38
39 #[inline]
41 pub fn as_refs(&self) -> $self_ty<$($phantom_ty,)? &T> {
42 $self_ty {
43 $($element: &*self.$element,)+
44 $($phantom: core::marker::PhantomData,)?
45 }
46 }
47
48 #[inline]
50 pub fn copied(&self) -> $self_ty<$($phantom_ty,)? T>
51 where
52 T: Copy,
53 {
54 $self_ty {
55 $($element: *self.$element,)+
56 $($phantom: core::marker::PhantomData,)?
57 }
58 }
59
60 #[inline]
62 pub fn cloned(&self) -> $self_ty<$($phantom_ty,)? T>
63 where
64 T: Clone,
65 {
66 $self_ty {
67 $($element: self.$element.clone(),)+
68 $($phantom: core::marker::PhantomData,)?
69 }
70 }
71 }
72
73 impl<$($phantom_ty,)? T, A> crate::Alpha<$self_ty<$($phantom_ty,)? &T>, &A> {
74 #[inline]
76 pub fn copied(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
77 where
78 T: Copy,
79 A: Copy,
80 {
81 crate::Alpha{color: self.color.copied(), alpha: *self.alpha}
82 }
83
84 #[inline]
86 pub fn cloned(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
87 where
88 T: Clone,
89 A: Clone,
90 {
91 crate::Alpha{color: self.color.cloned(), alpha: self.alpha.clone()}
92 }
93 }
94
95 impl<$($phantom_ty,)? T, A> crate::Alpha<$self_ty<$($phantom_ty,)? &mut T>, &mut A> {
96 #[inline]
98 pub fn set(&mut self, value: crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>) {
99 self.color.set(value.color);
100 *self.alpha = value.alpha;
101 }
102
103 #[inline]
105 pub fn as_refs(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? &T>, &A>{
106 crate::Alpha{color: self.color.as_refs(), alpha: &*self.alpha}
107 }
108
109 #[inline]
111 pub fn copied(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
112 where
113 T: Copy,
114 A: Copy,
115 {
116 crate::Alpha{color: self.color.copied(), alpha: *self.alpha}
117 }
118
119 #[inline]
121 pub fn cloned(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
122 where
123 T: Clone,
124 A: Clone,
125 {
126 crate::Alpha{color: self.color.cloned(), alpha: self.alpha.clone()}
127 }
128 }
129 }
130}
131
132macro_rules! impl_reference_component_methods_hue {
133 ( $self_ty: ident , [$($element: ident),+] $(, $phantom: ident)?) => {
134 impl_reference_component_methods_hue!($self_ty<>, [$($element),+] $(, $phantom)?);
135 };
136 ( $self_ty: ident < $($phantom_ty: ident)? > , [$($element: ident),+] $(, $phantom: ident)?) => {
137 impl<$($phantom_ty,)? T> $self_ty<$($phantom_ty,)? &T> {
138 #[inline]
140 pub fn copied(&self) -> $self_ty<$($phantom_ty,)? T>
141 where
142 T: Copy,
143 {
144 $self_ty {
145 hue: self.hue.copied(),
146 $($element: *self.$element,)+
147 $($phantom: core::marker::PhantomData,)?
148 }
149 }
150
151 #[inline]
153 pub fn cloned(&self) -> $self_ty<$($phantom_ty,)? T>
154 where
155 T: Clone,
156 {
157 $self_ty {
158 hue: self.hue.cloned(),
159 $($element: self.$element.clone(),)+
160 $($phantom: core::marker::PhantomData,)?
161 }
162 }
163 }
164
165 impl<$($phantom_ty,)? T> $self_ty<$($phantom_ty,)? &mut T> {
166 #[inline]
168 pub fn set(&mut self, value: $self_ty<$($phantom_ty,)? T>) {
169 self.hue.set(value.hue);
170 $(*self.$element = value.$element;)+
171 }
172
173 #[inline]
175 pub fn as_refs(&self) -> $self_ty<$($phantom_ty,)? &T> {
176 $self_ty {
177 hue: self.hue.as_ref(),
178 $($element: &*self.$element,)+
179 $($phantom: core::marker::PhantomData,)?
180 }
181 }
182
183 #[inline]
185 pub fn copied(&self) -> $self_ty<$($phantom_ty,)? T>
186 where
187 T: Copy,
188 {
189 $self_ty {
190 hue: self.hue.copied(),
191 $($element: *self.$element,)+
192 $($phantom: core::marker::PhantomData,)?
193 }
194 }
195
196 #[inline]
198 pub fn cloned(&self) -> $self_ty<$($phantom_ty,)? T>
199 where
200 T: Clone,
201 {
202 $self_ty {
203 hue: self.hue.cloned(),
204 $($element: self.$element.clone(),)+
205 $($phantom: core::marker::PhantomData,)?
206 }
207 }
208 }
209
210 impl<$($phantom_ty,)? T, A> crate::Alpha<$self_ty<$($phantom_ty,)? &T>, &A> {
211 #[inline]
213 pub fn copied(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
214 where
215 T: Copy,
216 A: Copy,
217 {
218 crate::Alpha{color: self.color.copied(), alpha: *self.alpha}
219 }
220
221 #[inline]
223 pub fn cloned(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
224 where
225 T: Clone,
226 A: Clone,
227 {
228 crate::Alpha{color: self.color.cloned(), alpha: self.alpha.clone()}
229 }
230 }
231
232 impl<$($phantom_ty,)? T, A> crate::Alpha<$self_ty<$($phantom_ty,)? &mut T>, &mut A> {
233 #[inline]
235 pub fn set(&mut self, value: crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>) {
236 self.color.set(value.color);
237 *self.alpha = value.alpha;
238 }
239
240 #[inline]
242 pub fn as_refs(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? &T>, &A>{
243 crate::Alpha{color: self.color.as_refs(), alpha: &*self.alpha}
244 }
245
246 #[inline]
248 pub fn copied(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
249 where
250 T: Copy,
251 A: Copy,
252 {
253 crate::Alpha{color: self.color.copied(), alpha: *self.alpha}
254 }
255
256 #[inline]
258 pub fn cloned(&self) -> crate::Alpha<$self_ty<$($phantom_ty,)? T>, A>
259 where
260 T: Clone,
261 A: Clone,
262 {
263 crate::Alpha{color: self.color.cloned(), alpha: self.alpha.clone()}
264 }
265 }
266 }
267}