macro_rules! export_cpy {
    (mod $module_name:ident { $($item:tt)* }) => { ... };
    (@process_item) => { ... };
    (@process_item enum $name:ident { $($variant:ident,)* } $($rest:tt)*) => { ... };
    (@process_item struct $name:ident { $($field:ident : $ftype:ty,)* } $($rest:tt)*) => { ... };
    (@process_item fn $name:ident($($param:ident : $ptype:ty),*) $(-> $ret:ty)? $body:block $($rest:tt)*) => { ... };
    (@generate_enum $name:ident { $($variant:ident,)* }) => { ... };
    (@generate_struct $name:ident { $($field:ident : $ftype:ty,)* }) => { ... };
    (@generate_function $name:ident($($arg:ident: $arg_type:ty),*) $(-> $ret:ty)? $body:block) => { ... };
    (@add_py_binding $m:ident,) => { ... };
    (@add_py_binding $m:ident, enum $name:ident { $($variant:ident,)* } $($rest:tt)*) => { ... };
    (@add_py_binding $m:ident, struct $name:ident { $($field:ident : $ftype:ty,)* } $($rest:tt)*) => { ... };
    (@add_py_binding $m:ident, fn $name:ident($($param:ident : $ptype:ty),*) $(-> $ret:ty)? $body:block $($rest:tt)*) => { ... };
}