1 //! Serde serialization/deserialization implementation
3 use {ArrayLength, GenericArray}
;
5 use core
::marker
::PhantomData
;
6 use serde
::{Deserialize, Deserializer, Serialize, Serializer}
;
7 use serde
::de
::{self, SeqAccess, Visitor}
;
9 impl<T
, N
> Serialize
for GenericArray
<T
, N
>
15 fn serialize
<S
>(&self, serializer
: S
) -> Result
<S
::Ok
, S
::Error
>
19 serializer
.collect_seq(self.iter())
23 struct GAVisitor
<T
, N
> {
28 impl<'de
, T
, N
> Visitor
<'de
> for GAVisitor
<T
, N
>
30 T
: Deserialize
<'de
> + Default
,
33 type Value
= GenericArray
<T
, N
>;
35 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
36 formatter
.write_str("struct GenericArray")
39 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<GenericArray
<T
, N
>, A
::Error
>
43 let mut result
= GenericArray
::default();
44 for i
in 0..N
::to_usize() {
45 result
[i
] = seq
.next_element()?
.ok_or_else(
46 || de
::Error
::invalid_length(i
, &self),
53 impl<'de
, T
, N
> Deserialize
<'de
> for GenericArray
<T
, N
>
55 T
: Deserialize
<'de
> + Default
,
58 fn deserialize
<D
>(deserializer
: D
) -> Result
<GenericArray
<T
, N
>, D
::Error
>
62 let visitor
= GAVisitor
{
66 deserializer
.deserialize_seq(visitor
)