use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::de::impls::VecVisitor;
use {ArrayLength, GenericArray};
impl<T, N> Serialize for GenericArray<T, N>
where T: Serialize, N: ArrayLength<T> {
#[inline]
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
where S: Serializer,
{
let mut state = try!(serializer.serialize_seq(Some(N::to_usize())));
for e in self.iter() {
try!(serializer.serialize_seq_elt(&mut state, e));
}
serializer.serialize_seq_end(state)
}
}
impl<T, N> Deserialize for GenericArray<T, N>
where T: Deserialize + Clone, N: ArrayLength<T>
{
fn deserialize<D>(deserializer: &mut D) -> Result<GenericArray<T, N>, D::Error>
where D: Deserializer,
{
deserializer.deserialize_seq(VecVisitor::new()).map(|vec| GenericArray::from_slice(&vec))
}
}