use していないモジュール内のジェネリックトレイトをマクロで指定して実装したい


このコードを通すにはどうすればよいでしょうか

[code]

    mod module {
        pub trait Trait<T> {}
    }
    
    struct Type();
    
    macro_rules! impl_trait {
        ($trait:path,$type:ty) => {
            impl $trait<i32> for $type {}
    //                       ~~~ expected `::`
        };
    }
    
    impl_trait!(module::Trait, Type);
    
[/code]




`path` だとあとから要素を足せなくなるので `tt` を使うとコンパイルが通ります。  
このときに `$(tt)*` の後ろにカンマがあるとパースエラーになるので `path` の方を最後にもってくる必要があります。

[code]

    mod module {
        pub trait Trait<T> {}
    }
    
    struct Type();
    
    macro_rules! impl_trait {
        ($type: ty, $($trait:tt)*) => {
            impl $($trait)* ::<i32> for $type {}
        }
    }
    
    impl_trait!(Type, module::Trait);
    
    fn main() {}
    
[/code]




`path` だとあとから要素を足せなくなるので `tt` を使うとコンパイルが通ります。  
このときに `$(tt)*` の後ろにカンマがあるとパースエラーになるので `path` の方を最後にもってくる必要があります。

[code]

    mod module {
        pub trait Trait<T> {}
    }
    
    struct Type();
    
    macro_rules! impl_trait {
        ($type: ty, $($trait:tt)*) => {
            impl $($trait)* ::<i32> for $type {}
        }
    }
    
    impl_trait!(Type, module::Trait);
    
    fn main() {}
    
[/code]

