9
9
10
10
extern crate serde;
11
11
12
+ use std:: fmt:: { Formatter , Result as FmtResult } ;
12
13
use std:: marker:: PhantomData ;
13
14
use std:: hash:: { BuildHasher , Hash } ;
14
15
15
16
use super :: LinkedHashMap ;
16
17
17
18
use self :: serde:: { Serialize , Serializer , Deserialize , Deserializer } ;
19
+ use self :: serde:: ser:: SerializeMap ;
18
20
use self :: serde:: de:: { Visitor , MapVisitor , Error } ;
19
21
20
22
impl < K , V , S > Serialize for LinkedHashMap < K , V , S >
@@ -23,15 +25,15 @@ impl<K, V, S> Serialize for LinkedHashMap<K, V, S>
23
25
S : BuildHasher
24
26
{
25
27
#[ inline]
26
- fn serialize < T > ( & self , serializer : & mut T ) -> Result < ( ) , T :: Error >
28
+ fn serialize < T > ( & self , serializer : T ) -> Result < T :: Ok , T :: Error >
27
29
where T : Serializer ,
28
30
{
29
- let mut state = try!( serializer. serialize_map ( Some ( self . len ( ) ) ) ) ;
31
+ let mut map_serializer = try!( serializer. serialize_map ( Some ( self . len ( ) ) ) ) ;
30
32
for ( k, v) in self {
31
- try!( serializer . serialize_map_key ( & mut state , k) ) ;
32
- try!( serializer . serialize_map_value ( & mut state , v) ) ;
33
+ try!( map_serializer . serialize_key ( k) ) ;
34
+ try!( map_serializer . serialize_value ( v) ) ;
33
35
}
34
- serializer . serialize_map_end ( state )
36
+ map_serializer . end ( )
35
37
}
36
38
}
37
39
@@ -55,15 +57,19 @@ impl<K, V> Visitor for LinkedHashMapVisitor<K, V>
55
57
{
56
58
type Value = LinkedHashMap < K , V > ;
57
59
60
+ fn expecting ( & self , formatter : & mut Formatter ) -> FmtResult {
61
+ write ! ( formatter, "a map" )
62
+ }
63
+
58
64
#[ inline]
59
- fn visit_unit < E > ( & mut self ) -> Result < Self :: Value , E >
65
+ fn visit_unit < E > ( self ) -> Result < Self :: Value , E >
60
66
where E : Error ,
61
67
{
62
68
Ok ( LinkedHashMap :: new ( ) )
63
69
}
64
70
65
71
#[ inline]
66
- fn visit_map < Visitor > ( & mut self , mut visitor : Visitor ) -> Result < Self :: Value , Visitor :: Error >
72
+ fn visit_map < Visitor > ( self , mut visitor : Visitor ) -> Result < Self :: Value , Visitor :: Error >
67
73
where Visitor : MapVisitor ,
68
74
{
69
75
let mut values = LinkedHashMap :: with_capacity ( visitor. size_hint ( ) . 0 ) ;
@@ -72,8 +78,6 @@ impl<K, V> Visitor for LinkedHashMapVisitor<K, V>
72
78
values. insert ( key, value) ;
73
79
}
74
80
75
- try!( visitor. end ( ) ) ;
76
-
77
81
Ok ( values)
78
82
}
79
83
}
@@ -82,7 +86,7 @@ impl<K, V> Deserialize for LinkedHashMap<K, V>
82
86
where K : Deserialize + Eq + Hash ,
83
87
V : Deserialize ,
84
88
{
85
- fn deserialize < D > ( deserializer : & mut D ) -> Result < LinkedHashMap < K , V > , D :: Error >
89
+ fn deserialize < D > ( deserializer : D ) -> Result < LinkedHashMap < K , V > , D :: Error >
86
90
where D : Deserializer ,
87
91
{
88
92
deserializer. deserialize_map ( LinkedHashMapVisitor :: new ( ) )
0 commit comments