hledger_parser/directive/include/
format.rs1use chumsky::prelude::*;
2
3use crate::state::State;
4
5#[derive(Clone, Debug, PartialEq)]
6pub enum Format {
7 Journal,
8 Timeclock,
9 Timedot,
10 Csv,
11 Ssv,
12 Tsv,
13 Rules,
14}
15
16pub fn format<'a>() -> impl Parser<'a, &'a str, Format, extra::Full<Rich<'a, char>, State, ()>> {
17 let journal = just("journal").map(|_| Format::Journal);
18 let timeclock = just("timeclock").map(|_| Format::Timeclock);
19 let timedot = just("timedot").map(|_| Format::Timedot);
20 let comma_sv = just("csv").map(|_| Format::Csv);
21 let semicolon_sv = just("ssv").map(|_| Format::Ssv);
22 let tab_sv = just("tsv").map(|_| Format::Tsv);
23 let rules = just("rules").map(|_| Format::Rules);
24 journal
25 .or(timeclock)
26 .or(timedot)
27 .or(comma_sv)
28 .or(semicolon_sv)
29 .or(tab_sv)
30 .or(rules)
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn ok_journal() {
39 let result = format().then_ignore(end()).parse("journal").into_result();
40 assert_eq!(result, Ok(Format::Journal));
41 }
42
43 #[test]
44 fn ok_timeclock() {
45 let result = format().then_ignore(end()).parse("timeclock").into_result();
46 assert_eq!(result, Ok(Format::Timeclock));
47 }
48
49 #[test]
50 fn ok_timedot() {
51 let result = format().then_ignore(end()).parse("timedot").into_result();
52 assert_eq!(result, Ok(Format::Timedot));
53 }
54
55 #[test]
56 fn ok_csv() {
57 let result = format().then_ignore(end()).parse("csv").into_result();
58 assert_eq!(result, Ok(Format::Csv));
59 }
60
61 #[test]
62 fn ok_ssv() {
63 let result = format().then_ignore(end()).parse("ssv").into_result();
64 assert_eq!(result, Ok(Format::Ssv));
65 }
66
67 #[test]
68 fn ok_tsv() {
69 let result = format().then_ignore(end()).parse("tsv").into_result();
70 assert_eq!(result, Ok(Format::Tsv));
71 }
72
73 #[test]
74 fn ok_rules() {
75 let result = format().then_ignore(end()).parse("rules").into_result();
76 assert_eq!(result, Ok(Format::Rules));
77 }
78
79 #[test]
80 fn err() {
81 let result = format().then_ignore(end()).parse("err").into_result();
82 assert!(result.is_err());
83 }
84}