A pattern binding is using the same name as one of the variants of a type. Erroneous code example: ```compile_fail,E0170 # #![deny(warnings)] enum Method { GET, POST, } fn is_empty(s: Method) -> bool { match s { GET => true, _ => false } } fn main() {} ``` Enum variants are qualified by default. For example, given this type: ``` enum Method { GET, POST, } ``` You would match it using: ``` enum Method { GET, POST, } let m = Method::GET; match m { Method::GET => {}, Method::POST => {}, } ``` If you don't qualify the names, the code will bind new variables named "GET" and "POST" instead. This behavior is likely not what you want, so `rustc` warns when that happens. Qualified names are good practice, and most code works well with them. But if you prefer them unqualified, you can import the variants into scope: ``` use Method::*; enum Method { GET, POST } # fn main() {} ``` If you want others to be able to import variants from your module directly, use `pub use`: ``` pub use Method::*; pub enum Method { GET, POST } # fn main() {} ```