#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Command {
pub name: String,
pub args: Vec<Argument>,
pub block: Vec<Command>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Argument {
Tag(String),
Number(u64),
String(String),
StringList(Vec<String>),
Test(Test),
TestList(Vec<Test>),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Test {
pub name: String,
pub tags: Vec<String>,
pub args: Vec<Argument>,
pub children: Vec<Test>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MatchType {
Is,
Contains,
Matches,
}
impl MatchType {
pub fn from_tags(tags: &[String]) -> Self {
for t in tags {
match t.as_str() {
"is" => return Self::Is,
"contains" => return Self::Contains,
"matches" => return Self::Matches,
_ => {}
}
}
Self::Is
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Action {
Keep {
flags: Vec<String>,
},
Discard,
FileInto {
mailbox: String,
flags: Vec<String>,
},
Redirect(String),
Reject(String),
Vacation(VacationAction),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VacationAction {
pub reason: String,
pub period: Option<VacationPeriod>,
pub subject: Option<String>,
pub from: Option<String>,
pub addresses: Vec<String>,
pub mime: bool,
pub handle: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VacationPeriod {
Days(u64),
Seconds(u64),
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Envelope {
pub from: Option<String>,
pub to: Vec<String>,
pub auth: Option<String>,
}