Eu tenho um enum:
enum Operation {
Add,
Subtract,
}
impl Operation {
fn from(s: &str) -> Result<Self, &str> {
match s {
"+" => Ok(Self::Add),
"-" => Ok(Self::Subtract),
_ => Err("Invalid operation"),
}
}
}
Desejo garantir, em tempo de compilação, que todas as variantes de enumeração sejam tratadas na from
função.
Por que eu preciso disso? Por exemplo, eu posso adicionar uma Product
operação e esquecer de lidar com este caso na from
função:
enum Operation {
// ...
Product,
}
impl Operation {
fn from(s: &str) -> Result<Self, &str> {
// No changes, I forgot to add a match arm for `Product`.
match s {
"+" => Ok(Self::Add),
"-" => Ok(Self::Subtract),
_ => Err("Invalid operation"),
}
}
}
É possível garantir que a expressão de correspondência retorne todas as variantes de um enum? Caso contrário, qual é a melhor maneira de imitar esse comportamento?