From 4499e66cf73279494718e821c2d4abc9b9330e20 Mon Sep 17 00:00:00 2001 From: Jun Kurihara Date: Wed, 27 Jul 2022 21:47:28 +0900 Subject: [PATCH] add bytename trait for implemeting server/path name in bytename --- src/utils/byte_name.rs | 35 +++++++++++++++++++++++++++++++++++ src/utils/mod.rs | 1 + 2 files changed, 36 insertions(+) create mode 100644 src/utils/byte_name.rs diff --git a/src/utils/byte_name.rs b/src/utils/byte_name.rs new file mode 100644 index 0000000..df818f8 --- /dev/null +++ b/src/utils/byte_name.rs @@ -0,0 +1,35 @@ +use bytes::{Buf, Bytes}; + +pub trait BytesName { + type Output: Buf; + fn to_byte_name(self) -> Self::Output; + fn to_ascii_lowercase_byte_name(self) -> Self::Output; +} + +impl> BytesName for T { + type Output = Bytes; + + fn to_byte_name(self) -> Self::Output { + let b = self.into().bytes().collect::>(); + Bytes::from(b) + } + + fn to_ascii_lowercase_byte_name(self) -> Self::Output { + let b = self.into().bytes().collect::>().to_ascii_lowercase(); + Bytes::from(b) + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn bytes_name_str_works() { + let s = "OK_string"; + let bn = s.to_byte_name(); + let bn_lc = s.to_ascii_lowercase_byte_name(); + + assert_eq!(Bytes::from(s.as_bytes()), bn); + assert_eq!(Bytes::from("ok_string"), bn_lc); + } +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs index d575479..256c294 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,3 +1,4 @@ +mod byte_name; mod socket_addr; pub use socket_addr::ToCanonical;