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 {
12        op: SizeOp,
13        bytes: u64,
14    },
15    And(Box<QueryNode>, Box<QueryNode>),
16    Or(Box<QueryNode>, Box<QueryNode>),
17    Not(Box<QueryNode>),
18}
19
20#[derive(Debug, Clone, PartialEq)]
21pub enum QueryField {
22    From,
23    To,
24    Cc,
25    Bcc,
26    Subject,
27    Body,
28    Filename,
29}
30
31#[derive(Debug, Clone, PartialEq)]
32pub enum FilterKind {
33    Unread,
34    Read,
35    Starred,
36    Draft,
37    Sent,
38    Trash,
39    Spam,
40    Answered,
41    Inbox,
42    Archived,
43    HasAttachment,
44}
45
46#[derive(Debug, Clone, PartialEq)]
47pub enum DateBound {
48    After,
49    Before,
50    Exact,
51}
52
53#[derive(Debug, Clone, PartialEq)]
54pub enum DateValue {
55    Specific(NaiveDate),
56    Today,
57    Yesterday,
58    ThisWeek,
59    ThisMonth,
60}
61
62#[derive(Debug, Clone, PartialEq)]
63pub enum SizeOp {
64    LessThan,
65    LessThanOrEqual,
66    Equal,
67    GreaterThan,
68    GreaterThanOrEqual,
69}