macro_rules! userobject {
(
$name:ident : $typ_name:literal ;
$self:ident
$(static ($fn_self:ident, $fn_args:ident) { $(
$fn_name:ident : $fn_literal_name:literal $fn_body:block
) *})?
$(mut ($fn_mut_self:ident, $fn_mut_args:ident) { $(
$fn_mut_name:ident : $fn_mut_literal_name:literal $fn_mut_body:block
) *})?
) => { ... };
}