wedpr_l_common_coder_base64/
lib.rs

1// Copyright 2020 WeDPR Lab Project Authors. Licensed under Apache-2.0.
2
3//! BaseX encoding and decoding functions.
4
5#[macro_use]
6extern crate wedpr_l_macros;
7
8use wedpr_l_utils::{error::WedprError, traits::Coder};
9
10/// Implements Base64 as a Coder instance.
11#[derive(Default, Debug, Clone)]
12pub struct WedprBase64 {}
13
14impl Coder for WedprBase64 {
15    fn encode<T: ?Sized + AsRef<[u8]>>(&self, input: &T) -> String {
16        base64::encode(input)
17    }
18
19    fn decode(&self, input: &str) -> Result<Vec<u8>, WedprError> {
20        match base64::decode(input) {
21            Ok(v) => return Ok(v),
22            Err(_) => {
23                wedpr_println!("Base64 decoding failed, input was: {}", input);
24                return Err(WedprError::DecodeError);
25            },
26        };
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn test_base64() {
36        let base64 = WedprBase64::default();
37        let str = "g6sLGLyLvnkmE6V0Ico=";
38        let wrong_str = "g6sLGLyLvnkmE6V0Ice=";
39        let bytes = base64.decode(&str).unwrap();
40        let recovered_str = base64.encode(&bytes);
41        assert_eq!(str, recovered_str);
42        assert!(wrong_str != recovered_str);
43    }
44}