use core::fmt;
#[inline]
pub fn display<T: AsRef<[u8]>>(input: T) -> impl fmt::Display + fmt::LowerHex + fmt::UpperHex {
Display(input)
}
struct Display<T: AsRef<[u8]>>(T);
impl<T: AsRef<[u8]>> fmt::Display for Display<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}
impl<T: AsRef<[u8]>> fmt::LowerHex for Display<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.write::<false>(f)
}
}
impl<T: AsRef<[u8]>> fmt::UpperHex for Display<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.write::<true>(f)
}
}
impl<T: AsRef<[u8]>> Display<T> {
fn write<const UPPER: bool>(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if f.alternate() {
f.write_str("0x")?;
}
unsafe { crate::imp::encode::<UPPER>(self.0.as_ref(), f) };
Ok(())
}
}