Skip to content

Commit

Permalink
Relax impls for [T; 0]
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Apr 6, 2017
1 parent 2fe67d3 commit 6388019
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
9 changes: 3 additions & 6 deletions serde/src/de/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -625,9 +625,7 @@ impl<A> ArrayVisitor<A> {
}
}

impl<'de, T> Visitor<'de> for ArrayVisitor<[T; 0]>
where T: Deserialize<'de>
{
impl<'de, T> Visitor<'de> for ArrayVisitor<[T; 0]> {
type Value = [T; 0];

fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
Expand All @@ -642,9 +640,8 @@ impl<'de, T> Visitor<'de> for ArrayVisitor<[T; 0]>
}
}

impl<'de, T> Deserialize<'de> for [T; 0]
where T: Deserialize<'de>
{
// Does not require T: Deserialize<'de>.
impl<'de, T> Deserialize<'de> for [T; 0] {
fn deserialize<D>(deserializer: D) -> Result<[T; 0], D::Error>
where D: Deserializer<'de>
{
Expand Down
11 changes: 10 additions & 1 deletion serde/src/ser/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,16 @@ impl<T> Serialize for PhantomData<T> {

///////////////////////////////////////////////////////////////////////////////

// Does not require T: Serialize.
impl<T> Serialize for [T; 0] {
#[inline]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer
{
try!(serializer.serialize_seq_fixed_size(0)).end()
}
}

macro_rules! array_impls {
($len:expr) => {
impl<T> Serialize for [T; $len] where T: Serialize {
Expand All @@ -160,7 +170,6 @@ macro_rules! array_impls {
}
}

array_impls!(0);
array_impls!(1);
array_impls!(2);
array_impls!(3);
Expand Down
5 changes: 5 additions & 0 deletions test_suite/tests/test_gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,11 @@ fn test_gen() {
#[derive(Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
struct UnitDenyUnknown;

#[derive(Serialize, Deserialize)]
struct EmptyArray {
empty: [X; 0],
}
}

//////////////////////////////////////////////////////////////////////////
Expand Down

0 comments on commit 6388019

Please sign in to comment.