| This error indicates that the struct, enum or enum variant must be matched | |
| non-exhaustively as it has been marked as `non_exhaustive`. | |
| When applied within a crate, downstream users of the crate will need to use the | |
| `_` pattern when matching enums and use the `..` pattern when matching structs. | |
| Downstream crates cannot match against non-exhaustive enum variants. | |
| For example, in the below example, since the enum is marked as | |
| `non_exhaustive`, it is required that downstream crates match non-exhaustively | |
| on it. | |
| ```rust,ignore (pseudo-Rust) | |
| #[non_exhaustive] | |
| pub enum Error { | |
| Message(String), | |
| Other, | |
| } | |
| impl Display for Error { | |
| fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { | |
| // This will not error, despite being marked as non_exhaustive, as this | |
| // enum is defined within the current crate, it can be matched | |
| // exhaustively. | |
| let display = match self { | |
| Message(s) => s, | |
| Other => "other or unknown error", | |
| }; | |
| formatter.write_str(display) | |
| } | |
| } | |
| ``` | |
| An example of matching non-exhaustively on the above enum is provided below: | |
| ```rust,ignore (pseudo-Rust) | |
| use mycrate::Error; | |
| // This will not error as the non_exhaustive Error enum has been matched with a | |
| // wildcard. | |
| match error { | |
| Message(s) => ..., | |
| Other => ..., | |
| _ => ..., | |
| } | |
| ``` | |
| Similarly, for structs, match with `..` to avoid this error. |