Skip to content

Commit be3c37e

Browse files
Serialize unsized RefCell, Mutex and RwLock
1 parent f0346ae commit be3c37e

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

serde/src/ser/impls.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ where
522522
}
523523
}
524524

525-
impl<T> Serialize for RefCell<T>
525+
impl<T: ?Sized> Serialize for RefCell<T>
526526
where
527527
T: Serialize,
528528
{
@@ -538,7 +538,7 @@ where
538538
}
539539

540540
#[cfg(feature = "std")]
541-
impl<T> Serialize for Mutex<T>
541+
impl<T: ?Sized> Serialize for Mutex<T>
542542
where
543543
T: Serialize,
544544
{
@@ -554,7 +554,7 @@ where
554554
}
555555

556556
#[cfg(feature = "std")]
557-
impl<T> Serialize for RwLock<T>
557+
impl<T: ?Sized> Serialize for RwLock<T>
558558
where
559559
T: Serialize,
560560
{

test_suite/tests/test_ser.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::sync::atomic::{
1313
AtomicBool, AtomicI16, AtomicI32, AtomicI8, AtomicIsize, AtomicU16, AtomicU32, AtomicU8,
1414
AtomicUsize,
1515
};
16-
use std::sync::{Arc, Weak as ArcWeak};
16+
use std::sync::{Arc, Mutex, RwLock, Weak as ArcWeak};
1717
use std::time::{Duration, UNIX_EPOCH};
1818

1919
#[cfg(unix)]
@@ -847,3 +847,39 @@ fn test_integer128() {
847847

848848
assert_ser_tokens_error(&1u128, &[], "u128 is not supported");
849849
}
850+
851+
#[test]
852+
fn test_refcell_dst() {
853+
assert_ser_tokens(
854+
&RefCell::new([true]) as &RefCell<[bool]>,
855+
&[
856+
Token::Seq { len: Some(1) },
857+
Token::Bool(true),
858+
Token::SeqEnd,
859+
],
860+
);
861+
}
862+
863+
#[test]
864+
fn test_mutex_dst() {
865+
assert_ser_tokens(
866+
&Mutex::new([true]) as &Mutex<[bool]>,
867+
&[
868+
Token::Seq { len: Some(1) },
869+
Token::Bool(true),
870+
Token::SeqEnd,
871+
],
872+
);
873+
}
874+
875+
#[test]
876+
fn test_rwlock_dst() {
877+
assert_ser_tokens(
878+
&RwLock::new([true]) as &RwLock<[bool]>,
879+
&[
880+
Token::Seq { len: Some(1) },
881+
Token::Bool(true),
882+
Token::SeqEnd,
883+
],
884+
);
885+
}

0 commit comments

Comments
 (0)