1 //! Serde serialization/deserialization implementation
4 use core
::marker
::PhantomData
;
5 use serde
::de
::{self, SeqAccess, Visitor}
;
6 use serde
::{ser::SerializeTuple, Deserialize, Deserializer, Serialize, Serializer}
;
7 use {ArrayLength, GenericArray}
;
9 impl<T
, N
> Serialize
for GenericArray
<T
, N
>
15 fn serialize
<S
>(&self, serializer
: S
) -> Result
<S
::Ok
, S
::Error
>
19 let mut tup
= serializer
.serialize_tuple(N
::USIZE
)?
;
21 tup
.serialize_element(el
)?
;
28 struct GAVisitor
<T
, N
> {
33 impl<'de
, T
, N
> Visitor
<'de
> for GAVisitor
<T
, N
>
35 T
: Deserialize
<'de
> + Default
,
38 type Value
= GenericArray
<T
, N
>;
40 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
41 formatter
.write_str("struct GenericArray")
44 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<GenericArray
<T
, N
>, A
::Error
>
48 let mut result
= GenericArray
::default();
49 for i
in 0..N
::USIZE
{
52 .ok_or_else(|| de
::Error
::invalid_length(i
, &self))?
;
58 impl<'de
, T
, N
> Deserialize
<'de
> for GenericArray
<T
, N
>
60 T
: Deserialize
<'de
> + Default
,
63 fn deserialize
<D
>(deserializer
: D
) -> Result
<GenericArray
<T
, N
>, D
::Error
>
67 let visitor
= GAVisitor
{
71 deserializer
.deserialize_tuple(N
::USIZE
, visitor
)
83 let array
= GenericArray
::<u8, typenum
::U2
>::default();
84 let serialized
= bincode
::serialize(&array
);
85 assert
!(serialized
.is_ok());
89 fn test_deserialize() {
90 let mut array
= GenericArray
::<u8, typenum
::U2
>::default();
93 let serialized
= bincode
::serialize(&array
).unwrap();
94 let deserialized
= bincode
::deserialize
::<GenericArray
<u8, typenum
::U2
>>(&serialized
);
95 assert
!(deserialized
.is_ok());
96 let array
= deserialized
.unwrap();
97 assert_eq
!(array
[0], 1);
98 assert_eq
!(array
[1], 2);
102 fn test_serialized_size() {
103 let array
= GenericArray
::<u8, typenum
::U1
>::default();
104 let size
= bincode
::serialized_size(&array
).unwrap();