diff options
author | 2019-07-31 07:50:57 +0800 | |
---|---|---|
committer | 2019-08-16 15:49:37 +0200 | |
commit | b1c17169d94d216d5532dd630a50a4c8c7fdeea6 (patch) | |
tree | 08c4123965a66efbe26baf44bead4ca0245febf8 /src | |
parent | 234d814122d6445bdfb15f635290bfc4dd36c2eb (diff) | |
download | bytes-b1c17169d94d216d5532dd630a50a4c8c7fdeea6.tar.gz bytes-b1c17169d94d216d5532dd630a50a4c8c7fdeea6.tar.zst bytes-b1c17169d94d216d5532dd630a50a4c8c7fdeea6.zip |
impl `LowerHex`/`UpperHex` for `Bytes`/`BytesMut`
Diffstat (limited to 'src')
-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 |