diff --git a/src/enc/impls.rs b/src/enc/impls.rs index 40e7234..271f92a 100644 --- a/src/enc/impls.rs +++ b/src/enc/impls.rs @@ -283,13 +283,29 @@ impl Encode for char { } } +// BlockedTODO: https://github.com/rust-lang/rust/issues/37653 +// +// We'll want to implement encoding for both &[u8] and &[T: Encode], +// but those implementations overlap because u8 also implements Encode // impl Encode for &'_ [u8] { // fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { -// super::encode_slice_len(encoder, self.len())?; -// encoder.writer().write(self) +// encoder.writer().write(*self) // } // } +impl Encode for [T] +where + T: Encode, +{ + fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { + super::encode_slice_len(encoder, self.len())?; + for item in self { + item.encode(encoder)?; + } + Ok(()) + } +} + const TAG_CONT: u8 = 0b1000_0000; const TAG_TWO_B: u8 = 0b1100_0000; const TAG_THREE_B: u8 = 0b1110_0000; @@ -324,26 +340,6 @@ fn encode_utf8(writer: &mut impl Writer, c: char) -> Result<(), EncodeError> { } } -// BlockedTODO: https://github.com/rust-lang/rust/issues/37653 -// -// We'll want to implement encoding for both &[u8] and &[T: Encode], -// but those implementations overlap because u8 also implements Encode -// impl Encode for &'_ [u8] { -// fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { -// encoder.writer().write(*self) -// } -// } - -impl Encode for &'_ [T] { - fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { - self.len().encode(encoder)?; - for item in self.iter() { - item.encode(encoder)?; - } - Ok(()) - } -} - impl Encode for str { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { self.as_bytes().encode(encoder) diff --git a/src/features/impl_alloc.rs b/src/features/impl_alloc.rs index c56d735..62449fb 100644 --- a/src/features/impl_alloc.rs +++ b/src/features/impl_alloc.rs @@ -375,19 +375,6 @@ where } } -impl Encode for Box<[T]> -where - T: Encode, -{ - fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { - crate::enc::encode_slice_len(encoder, self.len())?; - for item in self.iter() { - item.encode(encoder)?; - } - Ok(()) - } -} - impl<'cow, T> Decode for Cow<'cow, T> where T: ToOwned + ?Sized,