range_split/
impl_macro.rs1macro_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}