use data_encoding::Encoding;
pub fn encode(content: impl AsRef<[u8]>, encoding: Encoding) -> String {
encoding.encode(content.as_ref())
}
pub fn decode(value: &str, encoding: Encoding) -> Result<Vec<u8>> {
encoding
.decode(value.as_bytes())
.map_err(|_| Error::DecodeError(value.to_string()))
}
pub fn decode_to_string(value: &str, encoding: Encoding) -> Result<String> {
let decoded = decode(value, encoding)?;
String::from_utf8(decoded).map_err(|_| Error::InvalidUtf8)
}
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug)]
pub enum Error {
DecodeError(String),
InvalidUtf8,
}
impl core::fmt::Display for Error {
fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error> {
match self {
Error::DecodeError(b64) => write!(fmt, "Failed to decode string: {}", b64),
Error::InvalidUtf8 => write!(fmt, "Decoded bytes are not valid UTF-8"),
}
}
}
impl std::error::Error for Error {}