use alloc::{string::String, vec::Vec};
use base64::{Engine, engine::general_purpose::STANDARD};
pub fn base64_encode(data: &[u8]) -> String {
STANDARD.encode(data)
}
pub fn base64_decode(encoded: &str) -> crate::Result<Vec<u8>> {
STANDARD.decode(encoded).map_err(|e| crate::Error::InvalidBase64(e.to_string()))
}
pub fn hex_encode(data: &[u8]) -> String {
hex::encode(data)
}
pub fn hex_decode(encoded: &str) -> crate::Result<Vec<u8>> {
hex::decode(encoded).map_err(|e| crate::Error::InvalidHex(e.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_base64_roundtrip() {
let data = b"Hello, World!";
let encoded = base64_encode(data);
let decoded = base64_decode(&encoded).unwrap();
assert_eq!(data, &decoded[..]);
}
#[test]
fn test_hex_roundtrip() {
let data = b"Hello, World!";
let encoded = hex_encode(data);
let decoded = hex_decode(&encoded).unwrap();
assert_eq!(data, &decoded[..]);
}
}