Я использую nom для создания парсера в ржавчине, и у меня много проблем с ошибкой E0282.У меня есть это перечисление:
#[derive(Debug, PartialEq, Clone)]
enum Direction { N, E, S, W }
И я создаю его, используя этот синтаксический анализатор:
named!(direction_parser<&[u8], Direction>,
map_res!(alt!(tag_no_case!("N") | tag_no_case!("E") |
tag_no_case!("S") | tag_no_case!("W")),
|result: &[u8]|
match str::from_utf8(result)? {
"n" | "N" => Ok(Direction::N),
"e" | "E" => Ok(Direction::E),
"s" | "S" => Ok(Direction::S),
"w" | "W" => Ok(Direction::W)
}));
Но я продолжаю получать эту ошибку:
error[E0282]: type annotations needed
--> src/lib.rs:96:1
|
96 | / named!(direction_parser<&[u8], Direction>,
97 | | map_res!(alt!(tag_no_case!("N") | tag_no_case!("E") |
98 | | tag_no_case!("S") | tag_no_case!("W")),
99 | | |result: &[u8]|
... |
104 | | "w" | "W" => Ok(Direction::W)
105 | | }));
| |____________________^ cannot infer type for `E2`
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
Iиспользовал флаг возврата макроса, но в итоге оказался более запутанным.Куда мне нужно добавить аннотацию типа?