extern crate alloc;
use crate::{DecodeError, CharTable, CHAR_TABLE_UPPER, CHAR_TABLE_LOWER};
use crate::{arch, required_encode_len, required_decode_len};
use alloc::vec::Vec;
fn hex_to_vec(table: CharTable, input: &[u8], out: &mut Vec<u8>) -> usize {
let required_len = required_encode_len(input.len());
out.reserve(required_len);
let result = arch::hex(table, input, out.spare_capacity_mut());
unsafe {
out.set_len(out.len() + required_len);
}
result
}
#[inline(always)]
pub fn hex_upper_to_vec(input: &[u8], out: &mut Vec<u8>) -> usize {
hex_to_vec(CHAR_TABLE_UPPER, input, out)
}
#[inline(always)]
pub fn hex_lower_to_vec(input: &[u8], out: &mut Vec<u8>) -> usize {
hex_to_vec(CHAR_TABLE_LOWER, input, out)
}
#[inline(always)]
pub fn unhex_to_vec(input: &[u8], out: &mut Vec<u8>) -> Result<usize, DecodeError> {
let required_len = required_decode_len(input.len());
out.reserve(required_len);
let result = arch::unhex(input, out.spare_capacity_mut())?;
unsafe {
out.set_len(out.len() + required_len);
}
Ok(result)
}