use nom::{ character::complete::{alphanumeric1 as alphanumeric, line_ending as eol}, multi::many, sequence::terminated, IResult, Parser, }; pub fn end_of_line(input: &str) -> IResult<&str, &str> { if input.is_empty() { Ok((input, input)) } else { eol(input) } } pub fn read_line(input: &str) -> IResult<&str, &str> { terminated(alphanumeric, end_of_line).parse(input) } pub fn read_lines(input: &str) -> IResult<&str, Vec<&str>> { many(0.., read_line).parse(input) } #[cfg(feature = "alloc")] #[test] fn read_lines_test() { let res = Ok(("", vec!["Duck", "Dog", "Cow"])); assert_eq!(read_lines("Duck\nDog\nCow\n"), res); assert_eq!(read_lines("Duck\nDog\nCow"), res); }