extern crate nom;

use nom::{
  IResult,
  multi::many0,
  sequence::terminated,
  character::complete::{alphanumeric1 as alphanumeric, line_ending as eol}
};

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)(input)
}

pub fn read_lines(input: &str) -> IResult<&str, Vec<&str>> {
  many0(read_line)(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);
}
