use base64::{
alphabet,
engine::{
general_purpose::{GeneralPurpose, GeneralPurposeConfig},
DecodePaddingMode,
},
Engine,
};
const STANDARD: GeneralPurpose = GeneralPurpose::new(
&alphabet::STANDARD,
GeneralPurposeConfig::new().with_decode_padding_mode(DecodePaddingMode::Indifferent),
);
const URL_SAFE: GeneralPurpose = GeneralPurpose::new(
&alphabet::URL_SAFE,
GeneralPurposeConfig::new()
.with_decode_padding_mode(DecodePaddingMode::Indifferent)
.with_encode_padding(false),
);
pub fn encode<T>(input: T) -> String
where
T: AsRef<[u8]>,
{
STANDARD.encode(input)
}
pub fn decode<T>(input: T) -> crate::Result<Vec<u8>>
where
T: AsRef<[u8]>,
{
Ok(STANDARD.decode(input)?)
}
pub fn encode_url_safe<T>(input: T) -> String
where
T: AsRef<[u8]>,
{
URL_SAFE.encode(input)
}
pub fn decode_url_safe<T>(input: T) -> crate::Result<Vec<u8>>
where
T: AsRef<[u8]>,
{
Ok(URL_SAFE.decode(input)?)
}