cyware_convert/encoding/
base32hex.rs

1use data_encoding::BASE32HEX;
2#[cfg(target_family = "wasm")]
3use serde::{Deserialize, Serialize};
4
5use crate::Operation;
6use crate::OperationError;
7
8#[derive(Clone, Copy)]
9#[cfg_attr(target_family = "wasm", derive(Serialize, Deserialize))]
10pub struct Base32HexDecode {}
11
12impl Operation for Base32HexDecode {
13    fn execute(&self, input: &[u8]) -> Result<Vec<u8>, OperationError> {
14        BASE32HEX
15            .decode(input)
16            .map_err(|_| OperationError::DecodeError("Invalid base64 input".to_string()))
17    }
18}
19
20impl Base32HexDecode {
21    pub const fn new() -> Self {
22        Base32HexDecode {}
23    }
24}
25
26#[derive(Clone)]
27#[cfg_attr(target_family = "wasm", derive(Serialize, Deserialize))]
28pub struct Base32HexEncode {}
29
30impl Operation for Base32HexEncode {
31    fn execute(&self, input: &[u8]) -> Result<Vec<u8>, OperationError> {
32        Ok(BASE32HEX.encode(input).into())
33    }
34}
35
36impl Base32HexEncode {
37    pub const fn new() -> Self {
38        Base32HexEncode {}
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn base64_decode() {
48        let encoder = Base32HexDecode::new();
49        let actual = encoder.execute("CDGMIP3F".as_bytes()).unwrap();
50        let expected = "caido".as_bytes().to_vec();
51        assert_eq!(actual, expected);
52    }
53
54    #[test]
55    fn base64_encode() {
56        let encoder = Base32HexEncode::new();
57        let actual = encoder.execute("caido".as_bytes()).unwrap();
58        let expected = "CDGMIP3F".as_bytes().to_vec();
59        assert_eq!(actual, expected);
60    }
61}