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}