Error code E0638

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.

#[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:

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.