1use core::fmt;
2
3#[inline]
18pub fn display<T: AsRef<[u8]>>(input: T) -> impl fmt::Display + fmt::LowerHex + fmt::UpperHex {
19 Display(input)
20}
21
22struct Display<T: AsRef<[u8]>>(T);
23
24impl<T: AsRef<[u8]>> fmt::Display for Display<T> {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 fmt::LowerHex::fmt(self, f)
27 }
28}
29
30impl<T: AsRef<[u8]>> fmt::LowerHex for Display<T> {
31 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32 self.write::<false>(f)
33 }
34}
35
36impl<T: AsRef<[u8]>> fmt::UpperHex for Display<T> {
37 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38 self.write::<true>(f)
39 }
40}
41
42impl<T: AsRef<[u8]>> Display<T> {
43 fn write<const UPPER: bool>(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44 if f.alternate() {
45 f.write_str("0x")?;
46 }
47 let mut output = crate::output::FormatterOutput::new(f);
48 unsafe { crate::imp::encode::<UPPER>(self.0.as_ref(), &mut output) };
49 output.finish()
50 }
51}