use base64::Engine;
use base64::engine::general_purpose::STANDARD;
use crate::domain::errors::{AgentError, AgentResult, ErrorCode};
pub fn encode_base64(bytes: &[u8]) -> String {
STANDARD.encode(bytes)
}
pub fn decode_base64(input: &str) -> AgentResult<Vec<u8>> {
STANDARD
.decode(input)
.map_err(|err| AgentError::new(ErrorCode::InvalidMessage, err.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn encodes_and_decodes_raw_terminal_bytes() {
let bytes = b"\x1b[31mhello\r\n";
let encoded = encode_base64(bytes);
assert_eq!(encoded, "G1szMW1oZWxsbw0K");
assert_eq!(decode_base64(&encoded).unwrap(), bytes);
}
#[test]
fn rejects_invalid_base64() {
let err = decode_base64("%%%").unwrap_err();
assert_eq!(err.code(), ErrorCode::InvalidMessage);
}
}