Help w/ a macro rules

short description

Last episode:

obj: &Bar,
obj: Rc<Bar>

I now want to extend this to also handle

obj: ()

which would then define a static function.

problem statement

pub trait Bar_Aux_T {
    fn cat(&self, obj: (), x: u32); // NEW

    fn dog(&self, obj: Rc<Bar>, y: String);

    fn apple(&self, obj: &Bar, a: i32, b: i32);
}

impl Bar {
    fn cat(aux: &dyn Bar_Aux_T, x: u32)  {  // NEW
        aux.cat(self, x)
    }

    fn dog(self: Rc<Bar>, aux: &dyn Bar_Aux_T, y: String) {
        aux.dog(self, y)
    }

    fn apple(self: &Bar, aux: &dyn Bar_Aux_T, a: i32, b: i32) {
        aux.apple(self, a, b)
    }
}

My attempt so far:

#[macro_export]
macro_rules! foo {
    {
        $vis:vis trait $trait_name:ident {
            $(fn $method_name:ident(&self, obj: $(())? $(Rc<$obj_type_rc:ty>)? $(& $obj_type_ref:ty)?  $(, $arg:ident : $arg_type:ty)* $(,)?)
            $( -> $r_ty:ty)?
            ;)+
        }
    } => {
        $vis trait $trait_name {
            $(fn $method_name(&self, obj: $(())? $(Rc<$obj_type_rc>)? $(& $obj_type_ref)? $(())?, $($arg : $arg_type), *) $( -> $r_ty:ty)? ;)+
        }

        $(foo! { @expand_impl $(&self,)? $trait_name $method_name $(())? $(Rc<$obj_type_rc>)? $(& $obj_type_ref)? , $($arg: $arg_type), *,  $( -> $r_ty:ty)? })+
    };

    (@expand_impl $trait_name:ident $method_name:ident Rc<$obj_type:ty>, $($arg:ident : $arg_type:ty), *,
    $( -> $r_ty:ty)?
    ) => {
        impl $obj_type {
            fn $method_name(self: Rc<Self>, aux: &dyn $trait_name, $($arg: $arg_type), *) $( -> $r_ty:ty)? {
                aux.$method_name(self, $($arg), *)
            }
        }
    };

    (@expand_impl $trait_name:ident $method_name:ident (), $($arg:ident : $arg_type:ty), *, $( -> $r_ty:ty)?
    ) => {
        impl $obj_type {
            fn $method_name( aux: &dyn $trait_name, $($arg: $arg_type), *) $( -> $r_ty:ty)? {
                aux.$method_name((), $($arg), *)
            }
        }
    };

    (@expand_impl &self, $trait_name:ident $method_name:ident & $obj_type:ty, $($arg:ident : $arg_type:ty), *, $( -> $r_ty:ty)? ) => {
        impl $obj_type {
            fn $method_name(&self, aux: &dyn $trait_name, $($arg: $arg_type), *) $( -> $r_ty:ty)? {
                aux.$method_name(self, $($arg), *)
            }
        }
    }
}

I am getting an error about

   |
45 | ...   $(fn $method_name(&self, obj: $(())? $(Rc<$obj_type_rc>)? $(& $obj_type_ref)? $(())?, $($arg : $arg_type), *) $( -> $r_ty:ty)? ;)+
   |                                      ^^^^