devise_core/
macros.rs

1macro_rules! trait_method {
2    ($name:ident: $kind:ty, $default:ident) => (
3        fn $name(&mut self, value: $kind) -> Result<FnOutput> {
4            $default(self, value)
5        }
6    )
7}
8
9macro_rules! trait_forward {
10    (<$T:ident as $Trait:ident>::$name:ident: $kind:ty) => (
11        fn $name(&mut self, value: $kind) -> Result<FnOutput> {
12            <$T as $Trait>::$name(self, value)
13        }
14    )
15}
16
17macro_rules! function {
18    ($kind:ty) => (Option<Box<dyn FnMut(&mut Self, $kind) -> Result<FnOutput>>>)
19}
20
21macro_rules! builder {
22    ($name:ident: $kind:ty, $field:ident) => (
23        pub fn $name<F>(mut self, mut f: F) -> Self
24            where F: FnMut(&mut Self, $kind) -> FnOutput + 'static
25        {
26            self.$field = Some(Box::new(move |s, v| Ok(f(s, v))));
27            self
28        }
29    )
30}
31
32macro_rules! try_builder {
33    ($try_name:ident: $kind:ty, $field:ident) => (
34        pub fn $try_name<F>(mut self, f: F) -> Self
35            where F: FnMut(&mut Self, $kind) -> Result<FnOutput> + 'static
36        {
37            self.$field = Some(Box::new(f));
38            self
39        }
40    )
41}
42
43macro_rules! builder_forward {
44    ($name:ident : $kind:ty, $field:ident, $default:expr) => (
45        fn $name(&mut self, value: $kind) -> Result<FnOutput> {
46            match self.$field.take() {
47                Some(mut f) => {
48                    let result = f(self, value);
49                    self.$field = Some(f);
50                    result
51                }
52                None => $default(&mut *self, value)
53            }
54        }
55    )
56}
57
58macro_rules! builder_def_fwd {
59    ($name:ident : $kind:ty, $field:ident, $default:expr) => (
60        fn $name(&mut self, value: $kind) -> Result<FnOutput> {
61            if let Some(mut f) = self.$field.take() {
62                let result = f(self, value);
63                self.$field = Some(f);
64                result?;
65            }
66
67            $default(&mut *self, value)
68        }
69    )
70}