pub fn from_str<Input, O, P>(parser: P) -> FromStr<Input, O, P> where
    <Input as StreamOnce>::Error: ParseError<<Input as StreamOnce>::Token, <Input as StreamOnce>::Range, <Input as StreamOnce>::Position>,
    Input: Stream,
    P: Parser<Input>,
    P::Output: StrLike,
    O: FromStr,
    O::Err: Display
Expand description

Takes a parser that outputs a string like value (&str, String, &[u8] or Vec<u8>) and parses it using std::str::FromStr. Errors if the output of parser is not UTF-8 or if FromStr::from_str returns an error.

let mut parser = from_str(many1::<String, _, _>(char::digit()));
let result = parser.parse("12345\r\n");
assert_eq!(result, Ok((12345i32, "\r\n")));

// Range parsers work as well
let mut parser = from_str(range::take_while1(|c: char| c.is_digit(10)));
let result = parser.parse("12345\r\n");
assert_eq!(result, Ok((12345i32, "\r\n")));

// As do parsers that work with bytes
let digits = || range::take_while1(|b: u8| b >= b'0' && b <= b'9');
let mut parser = from_str(range::recognize((
    digits(),
    byte::byte(b'.'),
    digits(),
)));
let result = parser.parse(&b"123.45\r\n"[..]);
assert_eq!(result, Ok((123.45f64, &b"\r\n"[..])));