range_split/
impl_macro.rs

1macro_rules! take_range_method {
2    {
3        $(#[$attr:ident])*
4        fn take_range(&mut $self:ident, $range:ident: $Range:ty)
5        $body:block
6    } => {
7        $(#[$attr])*
8        fn take_range(&mut $self, $range: $Range) -> Self::Output
9        $body
10    };
11    {
12        $(#[$attr:ident])*
13        fn remove_range(&mut $self:ident, $range:ident: $Range:ty)
14        $body:block
15    } => {
16        $(#[$attr])*
17        fn remove_range(&mut $self, $range: $Range)
18        $body
19    };
20}
21
22macro_rules! impl_take_range {
23    {
24        $(
25            <$Range:ty> for $T:ty {
26                $(
27                    $(#[$attr:ident])*
28                    fn $method:ident(&mut $self:ident, $range:ident)
29                    $body:block
30                )*
31            }
32        )*
33    } => {
34        $(
35            impl $crate::TakeRange<$Range> for $T {
36                type Output = $T;
37
38                $(
39                    take_range_method! {
40                        $(#[$attr])*
41                        fn $method(&mut $self, $range: $Range)
42                        $body
43                    }
44                )*
45            }
46        )*
47    };
48}