use super::{
alphabet::{BCRYPT_ALPHABET, CRYPT_ALPHABET, IMAP_MUTF7_ALPHABET, PBKDF2_ALPHABET},
specifications::{
Base64, DecodePadding, EncodePadding, RuntimeSpec, STRICT_STANDARD_PADDED,
StrictStandardPadded, TrailingBits, runtime_codec,
},
wrapping::LineWrap,
};
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct BodyCodec<S> {
codec: Base64<S>,
wrapping: LineWrap,
}
impl<S> BodyCodec<S> {
const fn new(codec: Base64<S>, wrapping: LineWrap) -> Self {
Self { codec, wrapping }
}
#[must_use]
pub const fn codec(&self) -> &Base64<S> {
&self.codec
}
#[must_use]
pub const fn wrapping(&self) -> LineWrap {
self.wrapping
}
}
pub const MIME_BODY_STRICT: BodyCodec<StrictStandardPadded> =
BodyCodec::new(STRICT_STANDARD_PADDED, LineWrap::MIME_BODY_WRAP);
pub const PEM_BODY_LF: BodyCodec<StrictStandardPadded> =
BodyCodec::new(STRICT_STANDARD_PADDED, LineWrap::PEM_BODY_LF_WRAP);
pub const PEM_BODY_CRLF: BodyCodec<StrictStandardPadded> =
BodyCodec::new(STRICT_STANDARD_PADDED, LineWrap::PEM_BODY_CRLF_WRAP);
pub const BCRYPT_ALPHABET_NO_PAD: Base64<RuntimeSpec> = runtime_codec(
BCRYPT_ALPHABET,
EncodePadding::Unpadded,
DecodePadding::Forbid,
TrailingBits::RequireCanonical,
);
pub const CRYPT_ALPHABET_NO_PAD: Base64<RuntimeSpec> = runtime_codec(
CRYPT_ALPHABET,
EncodePadding::Unpadded,
DecodePadding::Forbid,
TrailingBits::RequireCanonical,
);
pub const PBKDF2_ALPHABET_NO_PAD: Base64<RuntimeSpec> = runtime_codec(
PBKDF2_ALPHABET,
EncodePadding::Unpadded,
DecodePadding::Forbid,
TrailingBits::RequireCanonical,
);
pub const IMAP_MUTF7_ALPHABET_NO_PAD: Base64<RuntimeSpec> = runtime_codec(
IMAP_MUTF7_ALPHABET,
EncodePadding::Unpadded,
DecodePadding::Forbid,
TrailingBits::RequireCanonical,
);