@@ -123,36 +123,33 @@ impl_decode_for_smartpointer!(Box);
123123impl_decode_for_smartpointer ! ( Rc ) ;
124124
125125// implement `Decode` for Cow<T> for all SQL types
126- impl < ' r , DB , T > Decode < ' r , DB > for Cow < ' _ , T >
126+ impl < ' r , ' a , DB , T > Decode < ' r , DB > for Cow < ' a , T >
127127where
128128 DB : Database ,
129129 T : ToOwned ,
130130 <T as ToOwned >:: Owned : Decode < ' r , DB > ,
131131{
132132 fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
133- let owned = <<T as ToOwned >:: Owned as Decode < DB > >:: decode ( value) ?;
134- Ok ( Cow :: Owned ( owned) )
133+ <<T as ToOwned >:: Owned as Decode < DB > >:: decode ( value) . map ( Cow :: Owned )
135134 }
136135}
137136
138- impl < ' r , DB > Decode < ' r , DB > for Cow < ' r , str >
137+ impl < ' r , ' a , DB > Decode < ' r , DB > for Cow < ' a , str >
139138where
140139 DB : Database ,
141- & ' r str : Decode < ' r , DB > ,
140+ String : Decode < ' r , DB > ,
142141{
143142 fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
144- let borrowed = <& str as Decode < DB > >:: decode ( value) ?;
145- Ok ( Cow :: Borrowed ( borrowed) )
143+ <String as Decode < DB > >:: decode ( value) . map ( Cow :: Owned )
146144 }
147145}
148146
149- impl < ' r , DB > Decode < ' r , DB > for Cow < ' r , [ u8 ] >
147+ impl < ' r , ' a , DB > Decode < ' r , DB > for Cow < ' a , [ u8 ] >
150148where
151149 DB : Database ,
152- & ' r [ u8 ] : Decode < ' r , DB > ,
150+ Vec < u8 > : Decode < ' r , DB > ,
153151{
154152 fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
155- let borrowed = <& [ u8 ] as Decode < DB > >:: decode ( value) ?;
156- Ok ( Cow :: Borrowed ( borrowed) )
153+ <Vec < u8 > as Decode < DB > >:: decode ( value) . map ( Cow :: Owned )
157154 }
158155}
0 commit comments