@@ -11,12 +11,10 @@ pub trait WireFormat: 'static + Send + Sync + Debug {
11
11
fn serialize < T : Serialize > ( value : T ) -> Result < Box < [ u8 ] > , LocalError > ;
12
12
13
13
/// The deserializer type.
14
- type Des < ' de > : ' de ;
14
+ type Des < ' de > : serde :: Deserializer < ' de > ;
15
15
16
16
/// Creates a `serde` deserializer given a bytestring.
17
- fn deserializer < ' de > ( bytes : & ' de [ u8 ] ) -> Self :: Des < ' de >
18
- where
19
- for < ' a > & ' a mut Self :: Des < ' de > : serde:: Deserializer < ' de > ;
17
+ fn deserializer ( bytes : & [ u8 ] ) -> Self :: Des < ' _ > ;
20
18
}
21
19
22
20
// Serialization
@@ -56,35 +54,16 @@ impl Serializer {
56
54
struct DeserializerFactoryWrapper < F > ( PhantomData < F > ) ;
57
55
58
56
trait ObjectSafeDeserializerFactory : Debug {
59
- fn make_deserializer < ' de > ( & self , bytes : & ' de [ u8 ] ) -> Box < dyn ObjectSafeDeserializer < ' de > + ' de > ;
57
+ fn make_erased_deserializer < ' de > ( & self , bytes : & ' de [ u8 ] ) -> Box < dyn erased_serde :: Deserializer < ' de > + ' de > ;
60
58
}
61
59
62
60
impl < F > ObjectSafeDeserializerFactory for DeserializerFactoryWrapper < F >
63
61
where
64
62
F : WireFormat ,
65
- for < ' a , ' de > & ' a mut F :: Des < ' de > : serde:: Deserializer < ' de > ,
66
63
{
67
- fn make_deserializer < ' de > ( & self , bytes : & ' de [ u8 ] ) -> Box < dyn ObjectSafeDeserializer < ' de > + ' de > {
64
+ fn make_erased_deserializer < ' de > ( & self , bytes : & ' de [ u8 ] ) -> Box < dyn erased_serde :: Deserializer < ' de > + ' de > {
68
65
let deserializer = F :: deserializer ( bytes) ;
69
- Box :: new ( deserializer)
70
- }
71
- }
72
-
73
- trait ObjectSafeDeserializer < ' de > {
74
- fn get_erased < ' s > ( & ' s mut self ) -> Box < dyn erased_serde:: Deserializer < ' de > + ' s >
75
- where
76
- ' de : ' s ;
77
- }
78
-
79
- impl < ' de , D : ' de > ObjectSafeDeserializer < ' de > for D
80
- where
81
- for < ' any > & ' any mut D : serde:: Deserializer < ' de > ,
82
- {
83
- fn get_erased < ' s > ( & ' s mut self ) -> Box < dyn erased_serde:: Deserializer < ' de > + ' s >
84
- where
85
- ' de : ' s ,
86
- {
87
- Box :: new ( <dyn erased_serde:: Deserializer < ' _ > >:: erase ( self ) )
66
+ Box :: new ( <dyn erased_serde:: Deserializer < ' _ > >:: erase ( deserializer) )
88
67
}
89
68
}
90
69
@@ -96,19 +75,17 @@ impl Deserializer {
96
75
pub ( crate ) fn new < F > ( ) -> Self
97
76
where
98
77
F : WireFormat ,
99
- for < ' a , ' de > & ' a mut F :: Des < ' de > : serde:: Deserializer < ' de > ,
100
78
{
101
- Self ( Box :: new ( DeserializerFactoryWrapper ( PhantomData ) ) )
79
+ Self ( Box :: new ( DeserializerFactoryWrapper ( PhantomData :: < F > ) ) )
102
80
}
103
81
104
82
/// Deserializes a `serde`-deserializable object.
105
83
pub fn deserialize < ' de , T > ( & self , bytes : & ' de [ u8 ] ) -> Result < T , DeserializationError >
106
84
where
107
85
T : Deserialize < ' de > ,
108
86
{
109
- let mut deserializer = self . 0 . make_deserializer ( bytes) ;
110
- let mut erased = deserializer. get_erased ( ) ;
111
- erased_serde:: deserialize :: < T > ( & mut erased)
87
+ let mut deserializer = self . 0 . make_erased_deserializer ( bytes) ;
88
+ erased_serde:: deserialize :: < T > ( & mut deserializer)
112
89
. map_err ( |err| DeserializationError :: new ( format ! ( "Deserialization error: {err:?}" ) ) )
113
90
}
114
91
}
0 commit comments