diff options
-rw-r--r-- | src/hex.rs | 37 | ||||
-rw-r--r-- | src/lib.rs | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/hex.rs b/src/hex.rs new file mode 100644 index 0000000..d3fdafb --- /dev/null +++ b/src/hex.rs @@ -0,0 +1,37 @@ +use crate::{Bytes, BytesMut}; +use std::fmt::{Formatter, LowerHex, Result, UpperHex}; + +struct BytesRef<'a>(&'a [u8]); + +impl<'a> LowerHex for BytesRef<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + for b in self.0 { + write!(f, "{:02x}", b)?; + } + Ok(()) + } +} + +impl<'a> UpperHex for BytesRef<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + for b in self.0 { + write!(f, "{:02X}", b)?; + } + Ok(()) + } +} + +macro_rules! hex_impl { + ($tr:ident, $ty:ty) => { + impl $tr for $ty { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + $tr::fmt(&BytesRef(self.as_ref()), f) + } + } + }; +} + +hex_impl!(LowerHex, Bytes); +hex_impl!(LowerHex, BytesMut); +hex_impl!(UpperHex, Bytes); +hex_impl!(UpperHex, BytesMut); @@ -80,6 +80,7 @@ pub use crate::buf::{ mod bytes; mod debug; +mod hex; pub use crate::bytes::{Bytes, BytesMut}; // Optional Serde support |