ruc 10.0.0

Rust Util Collections
Documentation
use crate::*;
use base64::prelude::{BASE64_STANDARD, Engine};

#[inline(always)]
pub fn encode<T: AsRef<[u8]>>(orig: T) -> String {
    BASE64_STANDARD.encode(orig)
}

#[inline(always)]
pub fn decode(encoded: &str) -> Result<Vec<u8>> {
    decode_generic(encoded).c(d!())
}

#[inline(always)]
pub fn decode_generic<T: AsRef<[u8]>>(encoded: T) -> Result<Vec<u8>> {
    BASE64_STANDARD.decode(encoded).c(d!())
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn roundtrip() {
        let msg = b"hello world \x00\xff binary data";
        let encoded = encode(msg);
        let decoded = decode(&encoded).unwrap();
        assert_eq!(decoded, msg);
    }

    #[test]
    fn roundtrip_empty() {
        let encoded = encode(b"");
        let decoded = decode(&encoded).unwrap();
        assert!(decoded.is_empty());
    }
}