58 lines
1.2 KiB
Rust
58 lines
1.2 KiB
Rust
//! Email body encoding algorithms.
|
|
|
|
use core::ops::Deref;
|
|
|
|
pub mod base64;
|
|
mod chooser;
|
|
|
|
/// A possible email `Content-Transfer-Encoding`
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
|
pub enum Encoding {
|
|
/// 7bit (US-ASCII)
|
|
SevenBit,
|
|
/// 8bit (UTF-8)
|
|
EightBit,
|
|
/// [Quoted Printable](https://docs.rs/quoted_printable/0.4.5/quoted_printable/fn.encode_to_str.html)
|
|
QuotedPrintable,
|
|
/// [Base64](self::base64::encode)
|
|
Base64,
|
|
}
|
|
|
|
/// A borrowed `str` or `[u8]`
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
|
pub enum StrOrBytes<'a> {
|
|
/// `str` variant
|
|
Str(&'a str),
|
|
/// `[u8]` variant
|
|
Bytes(&'a [u8]),
|
|
}
|
|
|
|
impl<'a> From<&'a str> for StrOrBytes<'a> {
|
|
fn from(s: &'a str) -> Self {
|
|
Self::Str(s)
|
|
}
|
|
}
|
|
|
|
impl<'a> From<&'a [u8]> for StrOrBytes<'a> {
|
|
fn from(s: &'a [u8]) -> Self {
|
|
Self::Bytes(s)
|
|
}
|
|
}
|
|
|
|
impl<'a, const N: usize> From<&'a [u8; N]> for StrOrBytes<'a> {
|
|
fn from(s: &'a [u8; N]) -> Self {
|
|
Self::Bytes(s)
|
|
}
|
|
}
|
|
|
|
impl Deref for StrOrBytes<'_> {
|
|
type Target = [u8];
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
match self {
|
|
Self::Str(s) => s.as_bytes(),
|
|
Self::Bytes(b) => b,
|
|
}
|
|
}
|
|
}
|