airlang 0.26.0

Air is a minimalist and universal programming language.
Documentation
use std::fmt::Write;
use std::num::ParseIntError;

pub(crate) fn bin_str_to_vec_u8(s: &str) -> Result<Vec<u8>, ParseIntError> {
    (0 .. s.len()).step_by(8).map(|i| u8::from_str_radix(&s[i .. i + 8], 2)).collect()
}

pub(crate) fn u8_array_to_bin_string(bytes: &[u8]) -> String {
    let mut s = String::with_capacity(bytes.len() * 8);
    u8_array_to_bin_string_mut(bytes, &mut s);
    s
}

pub(crate) fn u8_array_to_bin_string_mut(bytes: &[u8], s: &mut String) {
    for &b in bytes {
        write!(s, "{b:08b}").unwrap();
    }
}

pub(crate) fn hex_str_to_vec_u8(s: &str) -> Result<Vec<u8>, ParseIntError> {
    (0 .. s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i .. i + 2], 16)).collect()
}

pub(crate) fn u8_array_to_hex_string(bytes: &[u8]) -> String {
    let mut s = String::with_capacity(bytes.len() * 2);
    u8_array_to_hex_string_mut(bytes, &mut s);
    s
}

pub(crate) fn u8_array_to_hex_string_mut(bytes: &[u8], s: &mut String) {
    for &b in bytes {
        write!(s, "{b:02x}").unwrap();
    }
}