Macro function

Source
macro_rules! function {
    ($name:ident -> $out:ty, $pat:ident!($($args:tt)*)) => { ... };
    (pub $name:ident -> $out:ty, $pat:ident!($($args:tt)*)) => { ... };
    ($name:ident, $pat:ident!($($args:tt)*)) => { ... };
    (pub $name:ident, $pat:ident!($($args:tt)*)) => { ... };
}