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