@@ -166,6 +166,92 @@ impl_deserialize_num!(usize, deserialize_u64, integer);
166
166
impl_deserialize_num ! ( f32 , deserialize_f32, integer, float) ;
167
167
impl_deserialize_num ! ( f64 , deserialize_f64, integer, float) ;
168
168
169
+ serde_if_integer128 ! {
170
+ impl <' de> Deserialize <' de> for i128 {
171
+ #[ inline]
172
+ fn deserialize<D >( deserializer: D ) -> Result <Self , D :: Error >
173
+ where
174
+ D : Deserializer <' de>,
175
+ {
176
+ struct PrimitiveVisitor ;
177
+
178
+ impl <' de> Visitor <' de> for PrimitiveVisitor {
179
+ type Value = i128 ;
180
+
181
+ fn expecting( & self , formatter: & mut fmt:: Formatter ) -> fmt:: Result {
182
+ formatter. write_str( "i128" )
183
+ }
184
+
185
+ impl_deserialize_num!( integer i128 ) ;
186
+
187
+ #[ inline]
188
+ fn visit_i128<E >( self , v: i128 ) -> Result <Self :: Value , E >
189
+ where
190
+ E : Error ,
191
+ {
192
+ Ok ( v)
193
+ }
194
+
195
+ #[ inline]
196
+ fn visit_u128<E >( self , v: u128 ) -> Result <Self :: Value , E >
197
+ where
198
+ E : Error ,
199
+ {
200
+ if v <= i128 :: max_value( ) as u128 {
201
+ Ok ( v as i128 )
202
+ } else {
203
+ Err ( Error :: invalid_value( Unexpected :: Other ( "u128" ) , & self ) )
204
+ }
205
+ }
206
+ }
207
+
208
+ deserializer. deserialize_i128( PrimitiveVisitor )
209
+ }
210
+ }
211
+
212
+ impl <' de> Deserialize <' de> for u128 {
213
+ #[ inline]
214
+ fn deserialize<D >( deserializer: D ) -> Result <Self , D :: Error >
215
+ where
216
+ D : Deserializer <' de>,
217
+ {
218
+ struct PrimitiveVisitor ;
219
+
220
+ impl <' de> Visitor <' de> for PrimitiveVisitor {
221
+ type Value = u128 ;
222
+
223
+ fn expecting( & self , formatter: & mut fmt:: Formatter ) -> fmt:: Result {
224
+ formatter. write_str( "u128" )
225
+ }
226
+
227
+ impl_deserialize_num!( integer u128 ) ;
228
+
229
+ #[ inline]
230
+ fn visit_i128<E >( self , v: i128 ) -> Result <Self :: Value , E >
231
+ where
232
+ E : Error ,
233
+ {
234
+ if v >= 0 {
235
+ Ok ( v as u128 )
236
+ } else {
237
+ Err ( Error :: invalid_value( Unexpected :: Other ( "i128" ) , & self ) )
238
+ }
239
+ }
240
+
241
+ #[ inline]
242
+ fn visit_u128<E >( self , v: u128 ) -> Result <Self :: Value , E >
243
+ where
244
+ E : Error ,
245
+ {
246
+ Ok ( v)
247
+ }
248
+ }
249
+
250
+ deserializer. deserialize_u128( PrimitiveVisitor )
251
+ }
252
+ }
253
+ }
254
+
169
255
////////////////////////////////////////////////////////////////////////////////
170
256
171
257
struct CharVisitor ;
0 commit comments