diff --git a/src/ser/impls.rs b/src/ser/impls.rs index 08953727..3483af4f 100644 --- a/src/ser/impls.rs +++ b/src/ser/impls.rs @@ -130,6 +130,53 @@ impl<'a, T> Serialize for &'a [T] } } +macro_rules! array_impls { + ($len:expr) => { + impl Serialize for [T; $len] where T: Serialize { + #[inline] + fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + where S: Serializer, + { + serializer.visit_seq(SeqIteratorVisitor::new(self.iter(), Some($len))) + } + } + } +} + +array_impls!(0); +array_impls!(1); +array_impls!(2); +array_impls!(3); +array_impls!(4); +array_impls!(5); +array_impls!(6); +array_impls!(7); +array_impls!(8); +array_impls!(9); +array_impls!(10); +array_impls!(11); +array_impls!(12); +array_impls!(13); +array_impls!(14); +array_impls!(15); +array_impls!(16); +array_impls!(17); +array_impls!(18); +array_impls!(19); +array_impls!(20); +array_impls!(21); +array_impls!(22); +array_impls!(23); +array_impls!(24); +array_impls!(25); +array_impls!(26); +array_impls!(27); +array_impls!(28); +array_impls!(29); +array_impls!(30); +array_impls!(31); +array_impls!(32); + impl Serialize for Vec where T: Serialize { #[inline] fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> diff --git a/tests/test_ser.rs b/tests/test_ser.rs index 787c8ca6..60296f12 100644 --- a/tests/test_ser.rs +++ b/tests/test_ser.rs @@ -380,6 +380,24 @@ declare_tests! { Token::SeqEnd, ], } + test_array { + [0; 0] => vec![ + Token::SeqStart(Some(0)), + Token::SeqEnd, + ], + [1, 2, 3] => vec![ + Token::SeqStart(Some(3)), + Token::SeqSep, + Token::I32(1), + + Token::SeqSep, + Token::I32(2), + + Token::SeqSep, + Token::I32(3), + Token::SeqEnd, + ], + } test_vec { Vec::::new() => vec![ Token::SeqStart(Some(0)),