From d99576d9291d7ce7e97c9f7fe01333538e3738b2 Mon Sep 17 00:00:00 2001 From: "Aode (lion)" Date: Wed, 6 Oct 2021 19:17:15 -0500 Subject: [PATCH] Cow tools (again) --- src/lib.rs | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2686fed..d08b8ad 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,7 +51,7 @@ pub trait PathItem<'a> { where Self: Sized + 'a; - fn to_bytes(&self) -> Vec; + fn to_bytes<'b>(&'b self) -> Cow<'b, [u8]>; } pub trait PathNode<'a>: PathItem<'a> { @@ -67,7 +67,7 @@ pub trait IntoOwned { } impl PathGen<'static> { - pub fn new_owned(root: String) -> Self { + pub const fn new_owned(root: String) -> Self { PathGen { root: Cow::Owned(root), } @@ -123,11 +123,11 @@ impl Node { (self.inner, self.segment) } - pub fn parent(&self) -> &Inner { + pub const fn parent(&self) -> &Inner { &self.inner } - pub fn segment(&self) -> &Segment { + pub const fn segment(&self) -> &Segment { &self.segment } @@ -157,11 +157,11 @@ impl Field { (self.inner, self.segment) } - pub fn parent(&self) -> &Inner { + pub const fn parent(&self) -> &Inner { &self.inner } - pub fn segment(&self) -> &Segment { + pub const fn segment(&self) -> &Segment { &self.segment } } @@ -171,7 +171,7 @@ impl Prefix { self.inner } - pub fn parent(&self) -> &Inner { + pub const fn parent(&self) -> &Inner { &self.inner } } @@ -436,9 +436,9 @@ where fn construct(&self) -> Vec { let mut vec = self.inner.construct(); vec.extend_from_slice(b"."); - vec.extend_from_slice(&escape(N::NAME)); + vec.extend_from_slice(&escape(N::NAME.into())); vec.extend_from_slice(b"."); - vec.extend_from_slice(&escape(&self.segment.to_bytes())); + vec.extend_from_slice(&escape(self.segment.to_bytes())); vec } } @@ -451,7 +451,7 @@ where fn construct(&self) -> Vec { let mut vec = self.inner.construct(); vec.extend_from_slice(b"."); - vec.extend_from_slice(&escape(&self.segment.to_bytes())); + vec.extend_from_slice(&escape(self.segment.to_bytes())); vec } } @@ -464,7 +464,7 @@ where fn construct(&self) -> Vec { let mut vec = self.inner.construct(); vec.extend_from_slice(b"."); - vec.extend_from_slice(&escape(N::NAME)); + vec.extend_from_slice(&escape(N::NAME.into())); vec } } @@ -560,17 +560,17 @@ fn rsplit_once_escaped<'a>(s: &'a [u8]) -> Option<(&'a [u8], &'a [u8])> { None } -fn escape(s: &[u8]) -> Cow<'_, [u8]> { - if find_any(s, ESCAPE_CHARS).is_some() { +fn escape<'a>(s: Cow<'a, [u8]>) -> Cow<'a, [u8]> { + if find_any(&s, ESCAPE_CHARS).is_some() { let v = join( - split(s, b".").map(|part| join(split(part, b"\\"), b"\\\\")), + split(&s, b".").map(|part| join(split(part, b"\\"), b"\\\\")), b"\\.", ); return Cow::Owned(v); } - Cow::Borrowed(s) + s } fn unescape(s: &[u8]) -> Cow<'_, [u8]> { @@ -615,9 +615,9 @@ pub mod test { T2: PathItem<'b, Error = E> + Debug + PartialEq + 'b, E: Debug, { - let vec = item.to_bytes(); + let vec = item.to_bytes().to_vec(); let round_trip = T2::parse(Cow::Owned(vec.clone())).unwrap(); - let plus_one = round_trip.to_bytes(); + let plus_one = round_trip.to_bytes().to_vec(); assert_eq!(round_trip, item); assert_eq!(vec, plus_one); @@ -728,7 +728,7 @@ mod tests { ]; for (start, escaped) in inputs { - assert_eq!(escape(start).as_ref(), escaped); + assert_eq!(escape(start.into()).as_ref(), escaped); assert_eq!(unescape(escaped).as_ref(), start); } } @@ -844,8 +844,8 @@ mod tests { Ok(Deck(cow)) } - fn to_bytes(&self) -> Vec { - self.0.as_bytes().to_vec() + fn to_bytes<'b>(&'b self) -> Cow<'b, [u8]> { + Cow::Borrowed(self.0.as_bytes()) } } @@ -859,8 +859,8 @@ mod tests { Ok(Key(String::from_utf8_lossy(&bytes).parse()?)) } - fn to_bytes(&self) -> Vec { - self.0.to_string().into_bytes() + fn to_bytes<'b>(&'b self) -> Cow<'b, [u8]> { + Cow::Owned(self.0.to_string().into_bytes()) } } @@ -878,8 +878,8 @@ mod tests { Err(CommandFieldError) } - fn to_bytes(&self) -> Vec { - b"command".to_vec() + fn to_bytes<'b>(&'b self) -> Cow<'b, [u8]> { + Cow::Borrowed(b"command") } }