bin_encode_decode/encode/
impl.rs1use crate::*;
2
3impl Encode {
5 pub fn execute(charset: &str, encode_str: &str) -> Result<String, EncodeError> {
18 if !Charset::judge_charset_safe(charset) {
19 return Err(EncodeError::CharsetError);
20 }
21 let mut result: String = String::new();
22 let mut buffer: Vec<u8> = Vec::new();
23 for &byte in encode_str.as_bytes() {
24 buffer.extend_from_slice(&[0, 0, byte]);
25 }
26 for chunk in buffer.chunks(3) {
27 let combined: usize =
28 ((chunk[0] as usize) << 16) | ((chunk[1] as usize) << 8) | (chunk[2] as usize);
29 for i in (0..4).rev() {
30 let idx: usize = (combined >> (i * 6)) & 0b111111;
31 result.push(charset.chars().nth(idx).unwrap_or_default());
32 }
33 }
34 Ok(result)
35 }
36}