use alloc::string::String;
use alloc::vec::Vec;
use serde::de::Error;
pub trait Codec {
fn encode(bytes: &[u8]) -> String;
fn decode<E: Error>(s: &str) -> Result<Vec<u8>, E>;
}
pub struct LowerHex;
impl Codec for LowerHex {
fn encode(bytes: &[u8]) -> String {
hex::encode(bytes)
}
fn decode<E: Error>(s: &str) -> Result<Vec<u8>, E> {
hex::decode(s).map_err(E::custom)
}
}
pub struct UpperHex;
impl Codec for UpperHex {
fn encode(bytes: &[u8]) -> String {
hex::encode_upper(bytes)
}
fn decode<E: Error>(s: &str) -> Result<Vec<u8>, E> {
hex::decode(s).map_err(E::custom)
}
}
pub struct Base64;
impl Codec for Base64 {
fn encode(bytes: &[u8]) -> String {
::base64::encode(bytes)
}
fn decode<E: Error>(s: &str) -> Result<Vec<u8>, E> {
::base64::decode(s).map_err(E::custom)
}
}