macro_rules! map_fn_impl {
(fn [$dtype1:tt]($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt]($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt]($self:ident, $value:ident)
{ $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt, $dtype4:tt]($self:ident, $value:ident)
{ $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt, $dtype4:tt, $dtype5:tt]($self:ident, $value:ident)
{ $($body:tt)* }) => { ... };
(fn all($self:ident, $value:ident) { $($body:tt)* }) => { ... };
(fn unsigned($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn signed($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn text($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn boolean($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn float($self:ident, $value:ident) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt]($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt]($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt]($self:ident, _)
{ $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt, $dtype4:tt]($self:ident, _)
{ $($body:tt)* } $($rest:tt)*) => { ... };
(fn [$dtype1:tt, $dtype2:tt, $dtype3:tt, $dtype4:tt, $dtype5:tt]($self:ident, _)
{ $($body:tt)* }) => { ... };
(fn all($self:ident, _) { $($body:tt)* }) => { ... };
(fn unsigned($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn signed($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn text($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn boolean($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
(fn float($self:ident, _) { $($body:tt)* } $($rest:tt)*) => { ... };
() => { ... };
}