1#![forbid(unsafe_code)]
2
3#[macro_export]
23macro_rules! setters {
24 (
28 $(#[$meta:meta])*
29 $method:ident < direct > -> $field:ident : impl Into< $inner:ty >;
30 $($rest:tt)*
31 ) => {
32 $(#[$meta])*
33 pub fn $method<T>(mut self, $field: T) -> Self
34 where
35 T: Into<$inner>,
36 {
37 self.$field = $field.into();
38 self
39 }
40 $crate::setters!($($rest)*);
41 };
42
43 (
45 $(#[$meta:meta])*
46 $method:ident -> $field:ident : impl Into< $inner:ty >;
47 $($rest:tt)*
48 ) => {
49 $(#[$meta])*
50 pub fn $method<T>(mut self, $field: T) -> Self
51 where
52 T: Into<$inner>,
53 {
54 self.$field = Some($field.into());
55 self
56 }
57 $crate::setters!($($rest)*);
58 };
59
60 (
62 $(#[$meta:meta])*
63 $name:ident < direct > : impl Into< $inner:ty >;
64 $($rest:tt)*
65 ) => {
66 $(#[$meta])*
67 pub fn $name<T>(mut self, $name: T) -> Self
68 where
69 T: Into<$inner>,
70 {
71 self.$name = $name.into();
72 self
73 }
74 $crate::setters!($($rest)*);
75 };
76
77 (
79 $(#[$meta:meta])*
80 $name:ident : impl Into< $inner:ty >;
81 $($rest:tt)*
82 ) => {
83 $(#[$meta])*
84 pub fn $name<T>(mut self, $name: T) -> Self
85 where
86 T: Into<$inner>,
87 {
88 self.$name = Some($name.into());
89 self
90 }
91 $crate::setters!($($rest)*);
92 };
93
94 (
98 $(#[$meta:meta])*
99 $method:ident < direct > -> $field:ident : $ty:ty;
100 $($rest:tt)*
101 ) => {
102 $(#[$meta])*
103 pub fn $method(mut self, $field: $ty) -> Self {
104 self.$field = $field;
105 self
106 }
107 $crate::setters!($($rest)*);
108 };
109
110 (
112 $(#[$meta:meta])*
113 $method:ident -> $field:ident : $ty:ty;
114 $($rest:tt)*
115 ) => {
116 $(#[$meta])*
117 pub fn $method(mut self, $field: $ty) -> Self {
118 self.$field = Some($field);
119 self
120 }
121 $crate::setters!($($rest)*);
122 };
123
124 (
126 $(#[$meta:meta])*
127 $name:ident < direct > : $ty:ty;
128 $($rest:tt)*
129 ) => {
130 $(#[$meta])*
131 pub fn $name(mut self, $name: $ty) -> Self {
132 self.$name = $name;
133 self
134 }
135 $crate::setters!($($rest)*);
136 };
137
138 (
140 $(#[$meta:meta])*
141 $name:ident : $ty:ty;
142 $($rest:tt)*
143 ) => {
144 $(#[$meta])*
145 pub fn $name(mut self, $name: $ty) -> Self {
146 self.$name = Some($name);
147 self
148 }
149 $crate::setters!($($rest)*);
150 };
151
152 () => {};
154}
155
156#[macro_export]
173macro_rules! mut_setters {
174 (
178 $(#[$meta:meta])*
179 $method:ident < direct > -> $field:ident : impl Into< $inner:ty >;
180 $($rest:tt)*
181 ) => {
182 $(#[$meta])*
183 pub fn $method<T>(&mut self, $field: T)
184 where
185 T: Into<$inner>,
186 {
187 self.$field = $field.into();
188 }
189 $crate::mut_setters!($($rest)*);
190 };
191
192 (
194 $(#[$meta:meta])*
195 $method:ident -> $field:ident : impl Into< $inner:ty >;
196 $($rest:tt)*
197 ) => {
198 $(#[$meta])*
199 pub fn $method<T>(&mut self, $field: T)
200 where
201 T: Into<$inner>,
202 {
203 self.$field = Some($field.into());
204 }
205 $crate::mut_setters!($($rest)*);
206 };
207
208 (
210 $(#[$meta:meta])*
211 $name:ident < direct > : impl Into< $inner:ty >;
212 $($rest:tt)*
213 ) => {
214 $(#[$meta])*
215 pub fn $name<T>(&mut self, $name: T)
216 where
217 T: Into<$inner>,
218 {
219 self.$name = $name.into();
220 }
221 $crate::mut_setters!($($rest)*);
222 };
223
224 (
226 $(#[$meta:meta])*
227 $name:ident : impl Into< $inner:ty >;
228 $($rest:tt)*
229 ) => {
230 $(#[$meta])*
231 pub fn $name<T>(&mut self, $name: T)
232 where
233 T: Into<$inner>,
234 {
235 self.$name = Some($name.into());
236 }
237 $crate::mut_setters!($($rest)*);
238 };
239
240 (
244 $(#[$meta:meta])*
245 $method:ident < direct > -> $field:ident : $ty:ty;
246 $($rest:tt)*
247 ) => {
248 $(#[$meta])*
249 pub fn $method(&mut self, $field: $ty) {
250 self.$field = $field;
251 }
252 $crate::mut_setters!($($rest)*);
253 };
254
255 (
257 $(#[$meta:meta])*
258 $method:ident -> $field:ident : $ty:ty;
259 $($rest:tt)*
260 ) => {
261 $(#[$meta])*
262 pub fn $method(&mut self, $field: $ty) {
263 self.$field = Some($field);
264 }
265 $crate::mut_setters!($($rest)*);
266 };
267
268 (
270 $(#[$meta:meta])*
271 $name:ident < direct > : $ty:ty;
272 $($rest:tt)*
273 ) => {
274 $(#[$meta])*
275 pub fn $name(&mut self, $name: $ty) {
276 self.$name = $name;
277 }
278 $crate::mut_setters!($($rest)*);
279 };
280
281 (
283 $(#[$meta:meta])*
284 $name:ident : $ty:ty;
285 $($rest:tt)*
286 ) => {
287 $(#[$meta])*
288 pub fn $name(&mut self, $name: $ty) {
289 self.$name = Some($name);
290 }
291 $crate::mut_setters!($($rest)*);
292 };
293
294 () => {};
296}
297
298#[macro_export]
313macro_rules! ref_getters {
314 (
316 $(#[$meta:meta])*
317 $method:ident -> $field:ident : $ty:ty;
318 $($rest:tt)*
319 ) => {
320 $(#[$meta])*
321 pub fn $method(&self) -> Option<&$ty> {
322 self.$field.as_ref()
323 }
324 $crate::ref_getters!($($rest)*);
325 };
326
327 (
329 $(#[$meta:meta])*
330 $name:ident : $ty:ty;
331 $($rest:tt)*
332 ) => {
333 $(#[$meta])*
334 pub fn $name(&self) -> Option<&$ty> {
335 self.$name.as_ref()
336 }
337 $crate::ref_getters!($($rest)*);
338 };
339
340 () => {};
342}