From a7fba80e23a3778e1fb1850964429c3e5c1438aa Mon Sep 17 00:00:00 2001 From: Trangar Date: Thu, 17 Mar 2022 11:31:22 +0100 Subject: [PATCH] Made the Cow Encode constraints more permissive (#524) * Made the Cow Encode constraints more permissive * Made Decode more permissive for Cow --- src/features/impl_alloc.rs | 5 +++-- tests/issues.rs | 3 +++ tests/issues/issue_523.rs | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/issues/issue_523.rs diff --git a/src/features/impl_alloc.rs b/src/features/impl_alloc.rs index ea97cd6..bef4a60 100644 --- a/src/features/impl_alloc.rs +++ b/src/features/impl_alloc.rs @@ -285,7 +285,7 @@ where impl<'cow, T> Decode for Cow<'cow, T> where - T: ToOwned, + T: ToOwned + ?Sized, ::Owned: Decode, { fn decode(decoder: &mut D) -> Result { @@ -296,7 +296,8 @@ where impl<'cow, T> Encode for Cow<'cow, T> where - T: Encode + Clone, + T: ToOwned + ?Sized, + for<'a> &'a T: Encode, { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { self.as_ref().encode(encoder) diff --git a/tests/issues.rs b/tests/issues.rs index b930abd..5b32511 100644 --- a/tests/issues.rs +++ b/tests/issues.rs @@ -20,3 +20,6 @@ mod issue_498; #[path = "issues/issue_500.rs"] mod issue_500; + +#[path = "issues/issue_523.rs"] +mod issue_523; diff --git a/tests/issues/issue_523.rs b/tests/issues/issue_523.rs new file mode 100644 index 0000000..2cda3f9 --- /dev/null +++ b/tests/issues/issue_523.rs @@ -0,0 +1,9 @@ +#![cfg(all(feature = "derive", feature = "std"))] + +extern crate std; + +use bincode::{Decode, Encode}; +use std::borrow::Cow; + +#[derive(Clone, Encode, Decode)] +pub struct Foo<'a>(Cow<'a, str>);