Moved parameters to struct.
This commit is contained in:
parent
3403368e71
commit
a9ee5e3a6c
2 changed files with 542 additions and 379 deletions
177
src/lib.rs
177
src/lib.rs
|
@ -5,53 +5,20 @@ pub mod response;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub enum Request<T> {
|
pub enum Request<T> {
|
||||||
Ehlo {
|
Ehlo { host: T },
|
||||||
host: T,
|
Lhlo { host: T },
|
||||||
},
|
Helo { host: T },
|
||||||
Lhlo {
|
Mail { from: MailFrom<T> },
|
||||||
host: T,
|
Rcpt { to: RcptTo<T> },
|
||||||
},
|
Bdat { chunk_size: usize, is_last: bool },
|
||||||
Helo {
|
Auth { mechanism: u64, initial_response: T },
|
||||||
host: T,
|
Noop { value: T },
|
||||||
},
|
Vrfy { value: T },
|
||||||
Mail {
|
Expn { value: T },
|
||||||
from: T,
|
Help { value: T },
|
||||||
parameters: Vec<Parameter<T>>,
|
Etrn { name: T },
|
||||||
},
|
Atrn { domains: Vec<T> },
|
||||||
Rcpt {
|
Burl { uri: T, is_last: bool },
|
||||||
to: T,
|
|
||||||
parameters: Vec<Parameter<T>>,
|
|
||||||
},
|
|
||||||
Bdat {
|
|
||||||
chunk_size: usize,
|
|
||||||
is_last: bool,
|
|
||||||
},
|
|
||||||
Auth {
|
|
||||||
mechanism: u64,
|
|
||||||
initial_response: T,
|
|
||||||
},
|
|
||||||
Noop {
|
|
||||||
value: T,
|
|
||||||
},
|
|
||||||
Vrfy {
|
|
||||||
value: T,
|
|
||||||
},
|
|
||||||
Expn {
|
|
||||||
value: T,
|
|
||||||
},
|
|
||||||
Help {
|
|
||||||
value: T,
|
|
||||||
},
|
|
||||||
Etrn {
|
|
||||||
name: T,
|
|
||||||
},
|
|
||||||
Atrn {
|
|
||||||
domains: Vec<T>,
|
|
||||||
},
|
|
||||||
Burl {
|
|
||||||
uri: T,
|
|
||||||
is_last: bool,
|
|
||||||
},
|
|
||||||
StartTls,
|
StartTls,
|
||||||
Data,
|
Data,
|
||||||
Rset,
|
Rset,
|
||||||
|
@ -59,46 +26,48 @@ pub enum Request<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub enum Parameter<T> {
|
pub struct MailFrom<T> {
|
||||||
Body(Body),
|
pub address: T,
|
||||||
Size(usize),
|
pub flags: u64,
|
||||||
TransId(T),
|
pub size: usize,
|
||||||
By(By),
|
pub trans_id: Option<T>,
|
||||||
Notify(u8),
|
pub by: i64,
|
||||||
Orcpt(Orcpt<T>),
|
pub env_id: Option<T>,
|
||||||
Ret(Ret),
|
pub solicit: Option<T>,
|
||||||
EnvId(T),
|
pub mtrk: Option<Mtrk<T>>,
|
||||||
Solicit(T),
|
pub auth: Option<T>,
|
||||||
Mtrk(Mtrk<T>),
|
pub hold_for: u64,
|
||||||
Auth(T),
|
pub hold_until: u64,
|
||||||
HoldFor(u64),
|
pub mt_priority: i64,
|
||||||
HoldUntil(u64),
|
|
||||||
MtPriority(i64),
|
|
||||||
Rrvs(Rrvs),
|
|
||||||
SmtpUtf8,
|
|
||||||
RequireTls,
|
|
||||||
ConPerm,
|
|
||||||
ConNeg,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub enum Body {
|
pub struct RcptTo<T> {
|
||||||
SevenBit,
|
pub address: T,
|
||||||
EightBitMime,
|
pub orcpt: Option<(T, T)>,
|
||||||
BinaryMime,
|
pub rrvs: i64,
|
||||||
|
pub flags: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
pub const MAIL_BODY_7BIT: u64 = 1 << 0;
|
||||||
pub struct Orcpt<T> {
|
pub const MAIL_BODY_8BITMIME: u64 = 1 << 1;
|
||||||
pub addr_type: T,
|
pub const MAIL_BODY_BINARYMIME: u64 = 1 << 2;
|
||||||
pub addr: T,
|
pub const MAIL_RET_FULL: u64 = 1 << 3;
|
||||||
}
|
pub const MAIL_RET_HDRS: u64 = 1 << 4;
|
||||||
|
pub const MAIL_SMTPUTF8: u64 = 1 << 5;
|
||||||
|
pub const MAIL_REQUIRETLS: u64 = 1 << 6;
|
||||||
|
pub const MAIL_CONPERM: u64 = 1 << 7;
|
||||||
|
pub const MAIL_BY_NOTIFY: u64 = 1 << 8;
|
||||||
|
pub const MAIL_BY_RETURN: u64 = 1 << 9;
|
||||||
|
pub const MAIL_BY_TRACE: u64 = 1 << 10;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
pub const RCPT_NOTIFY_SUCCESS: u64 = 1 << 0;
|
||||||
pub enum Ret {
|
pub const RCPT_NOTIFY_FAILURE: u64 = 1 << 1;
|
||||||
Full,
|
pub const RCPT_NOTIFY_DELAY: u64 = 1 << 2;
|
||||||
Hdrs,
|
pub const RCPT_NOTIFY_NEVER: u64 = 1 << 3;
|
||||||
}
|
pub const RCPT_CONNEG: u64 = 1 << 4;
|
||||||
|
pub const RCPT_RRVS_REJECT: u64 = 1 << 5;
|
||||||
|
pub const RCPT_RRVS_CONTINUE: u64 = 1 << 6;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct Mtrk<T> {
|
pub struct Mtrk<T> {
|
||||||
|
@ -106,22 +75,6 @@ pub struct Mtrk<T> {
|
||||||
pub timeout: u64,
|
pub timeout: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
||||||
pub enum By {
|
|
||||||
Notify { time: i64, trace: bool },
|
|
||||||
Return { time: i64, trace: bool },
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
||||||
pub enum Rrvs {
|
|
||||||
Reject(i64),
|
|
||||||
Continue(i64),
|
|
||||||
}
|
|
||||||
|
|
||||||
pub const NOTIFY_SUCCESS: u8 = 0x01;
|
|
||||||
pub const NOTIFY_FAILURE: u8 = 0x02;
|
|
||||||
pub const NOTIFY_DELAY: u8 = 0x04;
|
|
||||||
|
|
||||||
pub const AUTH_SCRAM_SHA_256_PLUS: u64 = 1u64 << 0;
|
pub const AUTH_SCRAM_SHA_256_PLUS: u64 = 1u64 << 0;
|
||||||
pub const AUTH_SCRAM_SHA_256: u64 = 1u64 << 1;
|
pub const AUTH_SCRAM_SHA_256: u64 = 1u64 << 1;
|
||||||
pub const AUTH_SCRAM_SHA_1_PLUS: u64 = 1u64 << 2;
|
pub const AUTH_SCRAM_SHA_1_PLUS: u64 = 1u64 << 2;
|
||||||
|
@ -269,3 +222,33 @@ impl IntoString for Vec<u8> {
|
||||||
.unwrap_or_else(|err| String::from_utf8_lossy(err.as_bytes()).into_owned())
|
.unwrap_or_else(|err| String::from_utf8_lossy(err.as_bytes()).into_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Default> Default for MailFrom<T> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
address: Default::default(),
|
||||||
|
flags: Default::default(),
|
||||||
|
size: Default::default(),
|
||||||
|
trans_id: Default::default(),
|
||||||
|
by: Default::default(),
|
||||||
|
env_id: Default::default(),
|
||||||
|
solicit: Default::default(),
|
||||||
|
mtrk: Default::default(),
|
||||||
|
auth: Default::default(),
|
||||||
|
hold_for: Default::default(),
|
||||||
|
hold_until: Default::default(),
|
||||||
|
mt_priority: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Default> Default for RcptTo<T> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
address: Default::default(),
|
||||||
|
orcpt: Default::default(),
|
||||||
|
rrvs: Default::default(),
|
||||||
|
flags: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue