| 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() {} | |
| ``` |