Предположим, что этот код:
pub enum Operations {
Nop,
Read,
Write { content: Vec<u8> },
}
pub fn do_operation(op: Operations) {
match op {
Operations::Nop => {}
rest => {
// open a file
match rest {
Operations::Read => {
// read file
}
Operations::Write { .. } => {
// write file
}
}
}
}
}
Как видите, у меня есть три варианта, в двух из которых я хотел бы проделать аналогичные операции (в этом случае открыть файл и что-то с ним сделать ). Но с третьим вариантом я хочу выполнить операцию, которая вообще не требует открытия файла.
В настоящее время rust отказывается компилировать этот код:
error[E0004]: non-exhaustive patterns: `Nop` not covered
--> src/lib.rs:12:19
|
1 | / pub enum Operations {
2 | | Nop,
| | --- not covered
3 | | Read,
4 | | Write { content: Vec<u8> },
5 | | }
| |_- `Operations` defined here
...
12 | match rest {
| ^^^^ pattern `Nop` not covered
|
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
= note: the matched value is of type `Operations`
ИМХО, это должно быть компилятор обнаружил, что Operations::Nop
больше невозможно.
Есть ли способ заставить эту работу работать, например, активировав ночные функции или используя обходной путь? Есть ли на github открытая проблема, которая уже предлагает такое частичное соответствие?