@@ -82,17 +82,24 @@ where
82
82
}
83
83
}
84
84
85
- // implement `Decode` for Arc<T> for all SQL types
86
- impl < ' r , DB , T > Decode < ' r , DB > for Arc < T >
87
- where
88
- DB : Database ,
89
- T : Decode < ' r , DB > ,
90
- {
91
- fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
92
- Ok ( Arc :: new ( T :: decode ( value) ?) )
93
- }
85
+ macro_rules! impl_decode_for_smartpointer {
86
+ ( $smart_pointer: ty) => {
87
+ impl <' r, DB , T > Decode <' r, DB > for $smart_pointer
88
+ where
89
+ DB : Database ,
90
+ T : Decode <' r, DB >,
91
+ {
92
+ fn decode( value: <DB as Database >:: ValueRef <' r>) -> Result <Self , BoxDynError > {
93
+ Ok ( Self :: new( T :: decode( value) ?) )
94
+ }
95
+ }
96
+ } ;
94
97
}
95
98
99
+ impl_decode_for_smartpointer ! ( Arc <T >) ;
100
+ impl_decode_for_smartpointer ! ( Box <T >) ;
101
+ impl_decode_for_smartpointer ! ( Rc <T >) ;
102
+
96
103
// implement `Decode` for Cow<T> for all SQL types
97
104
impl < ' r , DB , T > Decode < ' r , DB > for Cow < ' _ , T >
98
105
where
@@ -104,25 +111,3 @@ where
104
111
Ok ( Cow :: Owned ( T :: decode ( value) ?) )
105
112
}
106
113
}
107
-
108
- // implement `Decode` for Box<T> for all SQL types
109
- impl < ' r , DB , T > Decode < ' r , DB > for Box < T >
110
- where
111
- DB : Database ,
112
- T : Decode < ' r , DB > ,
113
- {
114
- fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
115
- Ok ( Box :: new ( T :: decode ( value) ?) )
116
- }
117
- }
118
-
119
- // implement `Decode` for Rc<T> for all SQL types
120
- impl < ' r , DB , T > Decode < ' r , DB > for Rc < T >
121
- where
122
- DB : Database ,
123
- T : Decode < ' r , DB > ,
124
- {
125
- fn decode ( value : <DB as Database >:: ValueRef < ' r > ) -> Result < Self , BoxDynError > {
126
- Ok ( Rc :: new ( T :: decode ( value) ?) )
127
- }
128
- }
0 commit comments