#![doc(html_no_source)]
#![deny(missing_docs)]
#![deny(unsafe_code)]
#![warn(rust_2018_idioms)]
#![warn(clippy::all)]
#![warn(clippy::pedantic)]
#![warn(clippy::nursery)]
#![warn(clippy::cargo)]
#![warn(clippy::undocumented_unsafe_blocks)]
#![allow(clippy::missing_const_for_fn)]
pub const SMTP_PORT: u16 = 25;
pub const SUBMISSION_PORT: u16 = 587;
pub const SUBMISSIONS_PORT: u16 = 465;
#[macro_use]
mod types {
#[macro_use]
pub mod address;
pub mod client_name;
pub mod code_id;
pub mod reply;
pub mod reply_code;
pub mod tls_cipher_suite;
pub mod tls_protocol_version;
}
pub use types::{
address::{Address, Domain},
client_name::ClientName,
code_id::CodeID,
reply::Reply,
reply_code::*,
tls_cipher_suite::CipherSuite,
tls_protocol_version::ProtocolVersion,
};
pub type ReplyOrCodeID = either::Either<CodeID, Reply>;
mod context;
pub use context::{
AuthProperties, ConnectProperties, Context, ContextConnect, ContextFinished, ContextHelo,
ContextMailFrom, ContextRcptTo, FinishedProperties, HeloProperties, MailFromProperties,
RcptToProperties, Stage, TlsProperties, TransactionType,
};
pub mod libc_abstraction;
pub mod status;
pub mod rcpt;
pub mod transfer;
pub mod utils;
pub mod auth {
mod credentials;
mod mechanism;
pub use credentials::{Credentials, Error};
pub use mechanism::Mechanism;
}
#[cfg(test)]
mod tests {
mod libc_abstraction;
}
#[doc(hidden)]
#[macro_export]
macro_rules! collection {
($($k:expr => $v:expr),* $(,)?) => {{
use std::iter::{Iterator, IntoIterator};
Iterator::collect(IntoIterator::into_iter([$(($k, $v),)*]))
}};
($($v:expr),* $(,)?) => {{
use std::iter::{Iterator, IntoIterator};
Iterator::collect(IntoIterator::into_iter([$($v,)*]))
}};
}