Как исправить ошибку аннотации типа в макросе ржавчины - PullRequest
0 голосов
/ 05 июля 2019

Я использую 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использовал флаг возврата макроса, но в итоге оказался более запутанным.Куда мне нужно добавить аннотацию типа?

...