An attribute macro is a Rust procedural macro attached to an existing item. It can inject code and, unlike the other procedural macro forms, accepts arguments on the attribute. section 8.3
The form is #[MyAttribute]. Derive macros are restricted to struct and enum declarations; function-like procedural macros use macro!(), macro!{}, or macro![]. section 8.3

