How to parse complete f32 with nom?

Есть функция float_s that parses floats in stream mod (can return Incomplete). Я хочу использовать CompleteStr as input type instead. Как мне этого добиться?

Simple approach fails with complains about &str а также CompleteStr mismatches:

named!(parse_float_complete(CompleteStr) -> f32,
    ws!(::num::float_s)
);

я использую nom 4.0.0,

3 ответа

nom v4.1.0 исправили эту проблему:

  • float а также double теперь работает на всех типах ввода NOM (&[u8], &str, CompleteByteSlice, CompleteStr и любой тип, который реализует необходимые черты). float_s а также double_s получил такую ​​же модификацию, но теперь устарел

Мой текущий обходной путь - просто скопировать и вставить float_s реализация:

fn float_cs(input: CompleteStr) -> ::nom::IResult<CompleteStr, f32> {
  flat_map!(input, call!(::nom::recognize_float), parse_to!(f32))
}

float_s ожидает строку, поэтому вы должны извлечь строку из CompleteStr:

named!(parse_float_complete(CompleteStr) -> f32,
    ws!(call!(|input| ::num::float_s(input.0).map(|output, result| CompleteStr(output, result))))
);
Другие вопросы по тегам