use crate::{
base32::Error,
generator::Result,
id::{BeBytes, Id},
};
pub trait Base32Ext: Id
where
Self::Ty: BeBytes,
{
#[inline]
fn inner_byte_array() -> <Self::Ty as BeBytes>::ByteArray {
<Self::Ty as BeBytes>::ByteArray::default()
}
#[inline]
fn inner_base32_array() -> <Self::Ty as BeBytes>::Base32Array {
<Self::Ty as BeBytes>::Base32Array::default()
}
#[inline]
fn inner_encode_to_buf(&self, buf: &mut <Self::Ty as BeBytes>::Base32Array) {
super::encode_base32(self.to_raw().to_be_bytes().as_ref(), buf.as_mut());
}
#[inline]
fn inner_decode<E>(input: impl AsRef<[u8]>) -> Result<Self, Error<E>> {
let bytes = input.as_ref();
if bytes.len() != Self::Ty::BASE32_SIZE {
return Err(Error::DecodeInvalidLen { len: bytes.len() });
}
let raw = super::decode_base32(bytes)?;
Ok(Self::from_raw(raw))
}
}
impl<ID> Base32Ext for ID
where
ID: Id,
ID::Ty: BeBytes,
{
}