macro_rules! derive_trait {
    ($data:expr, _, $($trait:tt)*) => { ... };
    ($data:expr, ($($path:tt)*), $($trait:tt)*) => { ... };
    ($data:expr, $super:expr, _, $($trait:tt)*) => { ... };
    ($data:expr, $super:expr, ($($path:tt)*), $($trait:tt)*) => { ... };
    ($data:expr, $path:expr, $trait:expr) => { ... };
    ($data:expr, $super:expr, $path:expr, $trait:expr) => { ... };
}