| Something other than a type has been used when one was expected. |
| |
| Erroneous code examples: |
| |
| ```compile_fail,E0573 |
| enum Dragon { |
| Born, |
| } |
| |
| fn oblivion() -> Dragon::Born { // error! |
| Dragon::Born |
| } |
| |
| const HOBBIT: u32 = 2; |
| impl HOBBIT {} // error! |
| |
| enum Wizard { |
| Gandalf, |
| Saruman, |
| } |
| |
| trait Isengard { |
| fn wizard(_: Wizard::Saruman); // error! |
| } |
| ``` |
| |
| In all these errors, a type was expected. For example, in the first error, if |
| we want to return the `Born` variant from the `Dragon` enum, we must set the |
| function to return the enum and not its variant: |
| |
| ``` |
| enum Dragon { |
| Born, |
| } |
| |
| fn oblivion() -> Dragon { // ok! |
| Dragon::Born |
| } |
| ``` |
| |
| In the second error, you can't implement something on an item, only on types. |
| We would need to create a new type if we wanted to do something similar: |
| |
| ``` |
| struct Hobbit(u32); // we create a new type |
| |
| const HOBBIT: Hobbit = Hobbit(2); |
| impl Hobbit {} // ok! |
| ``` |
| |
| In the third case, we tried to only expect one variant of the `Wizard` enum, |
| which is not possible. To make this work, we need to using pattern matching |
| over the `Wizard` enum: |
| |
| ``` |
| enum Wizard { |
| Gandalf, |
| Saruman, |
| } |
| |
| trait Isengard { |
| fn wizard(w: Wizard) { // ok! |
| match w { |
| Wizard::Saruman => { |
| // do something |
| } |
| _ => {} // ignore everything else |
| } |
| } |
| } |
| ``` |