use super::*;
const RATIO: Ratio = Ratio::new(1, 2);
#[derive(Clone, Debug)]
pub struct LowerHex;
impl Sealed for LowerHex {}
impl Encoding for LowerHex {
const RATIO: Ratio = RATIO;
#[inline]
fn encode_bytes_into<B: EncodeBuf>(&self, bytes: &[u8], buffer: B) -> B::Output {
encode(bytes, b'a', buffer)
}
#[inline]
fn decode_bytes_into<B: DecodeBuf>(&self, string: &[u8], buffer: B) -> Result<B::Output, Error> {
decode(string, buffer)
}
}
impl LowerHex {
impl_encoding!(
encode: [
],
decode: [
],
encode_into: [
],
decode_into: [
],
);
}
#[derive(Clone, Debug)]
pub struct UpperHex;
impl Sealed for UpperHex {}
impl Encoding for UpperHex {
const RATIO: Ratio = RATIO;
#[inline]
fn encode_bytes_into<B: EncodeBuf>(&self, bytes: &[u8], buffer: B) -> B::Output {
encode(bytes, b'A', buffer)
}
#[inline]
fn decode_bytes_into<B: DecodeBuf>(&self, string: &[u8], buffer: B) -> Result<B::Output, Error> {
decode(string, buffer)
}
}
impl UpperHex {
impl_encoding!(
encode: [
],
decode: [
],
encode_into: [
],
decode_into: [
],
);
}
mod encode;
#[inline(never)]
fn encode<B: EncodeBuf>(bytes: &[u8], base: u8, mut buffer: B) -> B::Output {
let dest_len = RATIO.estimate_encoded_len(bytes.len());
unsafe {
let dest = buffer.allocate(dest_len);
let end = encode::encode_fn()(bytes, dest, base);
let len = end.offset_from(dest) as usize;
buffer.commit(len)
}
}
mod decode;
#[inline(never)]
fn decode<B: DecodeBuf>(string: &[u8], mut buffer: B) -> Result<B::Output, Error> {
let dest_len = RATIO.estimate_decoded_len(string.len());
unsafe {
let dest = buffer.allocate(dest_len);
let end = decode::decode_fn()(string, dest)?;
let len = end.offset_from(dest) as usize;
Ok(buffer.commit(len))
}
}