hledger_parser/directive/transaction/
status.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use chumsky::prelude::*;

use crate::state::State;

#[derive(Debug, Clone, PartialEq)]
pub enum Status {
    // !
    Pending,
    // *
    Cleared,
}

pub fn status<'a>() -> impl Parser<'a, &'a str, Status, extra::Full<Rich<'a, char>, State, ()>> {
    choice([just("!").to(Status::Pending), just("*").to(Status::Cleared)])
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn pending() {
        let result = status().then_ignore(end()).parse("!").into_result();
        assert_eq!(result, Ok(Status::Pending));
    }

    #[test]
    fn cleared() {
        let result = status().then_ignore(end()).parse("*").into_result();
        assert_eq!(result, Ok(Status::Cleared));
    }

    #[test]
    fn error() {
        let result = status().then_ignore(end()).parse("?").into_result();
        assert!(result.is_err());
    }
}