Skip to main content

mxr_search/
ast.rs

1use chrono::NaiveDate;
2
3#[derive(Debug, Clone, PartialEq)]
4pub enum QueryNode {
5    Text(String),
6    Phrase(String),
7    Field { field: QueryField, value: String },
8    Filter(FilterKind),
9    Label(String),
10    DateRange { bound: DateBound, date: DateValue },
11    Size { op: SizeOp, bytes: u64 },
12    And(Box<QueryNode>, Box<QueryNode>),
13    Or(Box<QueryNode>, Box<QueryNode>),
14    Not(Box<QueryNode>),
15}
16
17#[derive(Debug, Clone, PartialEq)]
18pub enum QueryField {
19    From,
20    To,
21    Cc,
22    Bcc,
23    Subject,
24    Body,
25    Filename,
26}
27
28#[derive(Debug, Clone, PartialEq)]
29pub enum FilterKind {
30    Unread,
31    Read,
32    Starred,
33    Draft,
34    Sent,
35    Trash,
36    Spam,
37    Answered,
38    Inbox,
39    Archived,
40    HasAttachment,
41}
42
43#[derive(Debug, Clone, PartialEq)]
44pub enum DateBound {
45    After,
46    Before,
47    Exact,
48}
49
50#[derive(Debug, Clone, PartialEq)]
51pub enum DateValue {
52    Specific(NaiveDate),
53    Today,
54    Yesterday,
55    ThisWeek,
56    ThisMonth,
57}
58
59#[derive(Debug, Clone, PartialEq)]
60pub enum SizeOp {
61    LessThan,
62    LessThanOrEqual,
63    Equal,
64    GreaterThan,
65    GreaterThanOrEqual,
66}