#![cfg_attr(not(fuzzing), allow(unexpected_cfgs))]
pub mod error;
pub mod types;
mod codec;
mod connection;
mod deliver_by;
mod future_release;
pub use connection::{SmtpConnection, TlsMode};
pub use daaki_message::Address;
pub use error::Error;
pub use types::{
AddressLiteral, AuthMechanism, BodyType, DeliverBy, DeliverByMode, Domain, DomainOrLiteral,
DsnNotify, DsnRet, EnhancedStatusCode, EnvidValue, ForwardPath, LmtpSendResult, MailFromParams,
Mailbox, Protocol, RcptToParams, RecipientResult, RejectedRecipient, ReversePath, SendResult,
ServerCapabilities, SmtpAuthParam, SmtpExtension, SmtpResponse, ValidationError, XtextSafe,
};
pub type Result<T> = std::result::Result<T, Error>;
#[allow(unexpected_cfgs)]
#[cfg(fuzzing)]
#[doc(hidden)]
pub mod fuzz {
use crate::codec::decode;
pub fn parse_response(input: &[u8]) -> Option<crate::types::SmtpResponse> {
decode::parse_response(input).ok().map(|(_, r)| r)
}
pub fn parse_ehlo_capabilities(
response: &crate::types::SmtpResponse,
) -> crate::types::ServerCapabilities {
decode::parse_ehlo_capabilities(response)
}
pub fn strip_enhanced_code(
text: &str,
reply_code: u16,
) -> Option<(crate::types::EnhancedStatusCode, String)> {
decode::strip_enhanced_code(text, reply_code).map(|(esc, rest)| (esc, rest.to_owned()))
}
pub fn parse_enhanced_code_from_str(s: &str) -> Option<crate::types::EnhancedStatusCode> {
decode::parse_enhanced_code_from_str(s)
}
}
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
mod readme_doctests {}
#[cfg(test)]
mod tests {
#[test]
fn readme_does_not_advertise_sasl_ir_as_smtp_extension() {
let readme = include_str!("../README.md");
let auth_row = readme
.lines()
.find(|line| line.contains("| **Auth** |"))
.unwrap_or_default();
assert!(
!auth_row.contains("SASL-IR"),
"README must not present legacy SASL-IR as a standard SMTP extension"
);
}
}