macro_rules! sqlfunc { ( fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[is_monotone = $is_monotone:expr] fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] #[is_monotone = $is_monotone:expr] fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] #[inverse = $inverse:expr] fn $fn_name:ident $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] #[inverse = $inverse:expr] #[is_monotone = $is_monotone:expr] fn $fn_name:ident ($($params:tt)*) $($tail:tt)* ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] #[inverse = $inverse:expr] #[is_monotone = $is_monotone:expr] fn $fn_name:ident<$lt:lifetime>(mut $param_name:ident: $input_ty:ty $(,)?) -> $output_ty:ty $body:block ) => { ... }; ( #[sqlname = $name:expr] #[preserves_uniqueness = $preserves_uniqueness:expr] #[inverse = $inverse:expr] #[is_monotone = $is_monotone:expr] fn $fn_name:ident<$lt:lifetime>($param_name:ident: $input_ty:ty $(,)?) -> $output_ty:ty $body:block ) => { ... }; }