bin_encode_decode/encode/
impl.rs

1use crate::*;
2
3/// Provides encoding functionality.
4impl Encode {
5    /// Encodes input string using specified character set.
6    ///
7    /// Processes 3-byte chunks to produce 4-character encoded segments.
8    ///
9    /// # Arguments
10    ///
11    /// - `&str` - The character set used for encoding.
12    /// - `&str` - String to encode.
13    ///
14    /// # Returns
15    ///
16    /// - `Result<String, EncodeError>` - Encoded string or error.
17    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}