jisort/parser/
empty_line.rs

1use nom::{
2    character::complete::{line_ending, space0},
3    IResult,
4};
5
6/// Parse an empty line.
7///
8/// An empty line might consist of nothing or multiple spaces.
9/// An empty line always has a line ending (`\n` or `\r\n`).
10pub fn empty_line(input: &str) -> IResult<&str, ()> {
11    let (input, _) = space0(input)?;
12    let (input, _) = line_ending(input)?;
13
14    Ok((input, ()))
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20
21    #[test]
22    fn dont_parse_nothing() {
23        let res = empty_line("");
24
25        assert!(res.is_err());
26    }
27
28    #[test]
29    fn parse_newline() {
30        let (rest, _) = empty_line("\n").unwrap();
31
32        assert_eq!(rest, "");
33    }
34
35    #[test]
36    fn parse_carriage_return() {
37        let (rest, _) = empty_line("\r\n").unwrap();
38
39        assert_eq!(rest, "");
40    }
41
42    #[test]
43    fn parse_with_spaces() {
44        let (rest, _) = empty_line("  \n").unwrap();
45
46        assert_eq!(rest, "");
47    }
48
49    #[test]
50    fn parse_with_tab() {
51        let (rest, _) = empty_line("\t\n").unwrap();
52
53        assert_eq!(rest, "");
54    }
55}