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))))
);