xref: /third_party/rust/crates/nom/tests/multiline.rs (revision 6855e09e)
1use nom::{
2  character::complete::{alphanumeric1 as alphanumeric, line_ending as eol},
3  multi::many0,
4  sequence::terminated,
5  IResult,
6};
7
8pub fn end_of_line(input: &str) -> IResult<&str, &str> {
9  if input.is_empty() {
10    Ok((input, input))
11  } else {
12    eol(input)
13  }
14}
15
16pub fn read_line(input: &str) -> IResult<&str, &str> {
17  terminated(alphanumeric, end_of_line)(input)
18}
19
20pub fn read_lines(input: &str) -> IResult<&str, Vec<&str>> {
21  many0(read_line)(input)
22}
23
24#[cfg(feature = "alloc")]
25#[test]
26fn read_lines_test() {
27  let res = Ok(("", vec!["Duck", "Dog", "Cow"]));
28
29  assert_eq!(read_lines("Duck\nDog\nCow\n"), res);
30  assert_eq!(read_lines("Duck\nDog\nCow"), res);
31}
32