File tree 3 files changed +42
-6
lines changed
3 files changed +42
-6
lines changed Original file line number Diff line number Diff line change
1
+ use lib:: fmt:: { self , Write } ;
2
+ use lib:: str;
3
+
4
+ pub struct Buf < ' a > {
5
+ bytes : & ' a mut [ u8 ] ,
6
+ offset : usize ,
7
+ }
8
+
9
+ impl < ' a > Buf < ' a > {
10
+ pub fn new ( bytes : & ' a mut [ u8 ] ) -> Self {
11
+ Buf { bytes, offset : 0 }
12
+ }
13
+
14
+ pub fn as_str ( & self ) -> & str {
15
+ let slice = & self . bytes [ ..self . offset ] ;
16
+ unsafe { str:: from_utf8_unchecked ( slice) }
17
+ }
18
+ }
19
+
20
+ impl < ' a > Write for Buf < ' a > {
21
+ fn write_str ( & mut self , s : & str ) -> fmt:: Result {
22
+ if self . offset + s. len ( ) > self . bytes . len ( ) {
23
+ Err ( fmt:: Error )
24
+ } else {
25
+ self . bytes [ self . offset ..self . offset + s. len ( ) ] . copy_from_slice ( s. as_bytes ( ) ) ;
26
+ self . offset += s. len ( ) ;
27
+ Ok ( ( ) )
28
+ }
29
+ }
30
+ }
Original file line number Diff line number Diff line change @@ -118,6 +118,8 @@ use lib::*;
118
118
119
119
pub mod value;
120
120
121
+ #[ cfg( not( no_integer128) ) ]
122
+ mod format;
121
123
mod ignored_any;
122
124
mod impls;
123
125
mod utf8;
@@ -1366,8 +1368,10 @@ pub trait Visitor<'de>: Sized {
1366
1368
where
1367
1369
E : Error ,
1368
1370
{
1369
- let _ = v;
1370
- Err ( Error :: invalid_type( Unexpected :: Other ( "i128" ) , & self ) )
1371
+ let mut buf = [ 0u8 ; 58 ] ;
1372
+ let mut writer = format:: Buf :: new( & mut buf) ;
1373
+ fmt:: Write :: write_fmt( & mut writer, format_args!( "integer `{}` as i128" , v) ) . unwrap( ) ;
1374
+ Err ( Error :: invalid_type( Unexpected :: Other ( writer. as_str( ) ) , & self ) )
1371
1375
}
1372
1376
}
1373
1377
@@ -1426,8 +1430,10 @@ pub trait Visitor<'de>: Sized {
1426
1430
where
1427
1431
E : Error ,
1428
1432
{
1429
- let _ = v;
1430
- Err ( Error :: invalid_type( Unexpected :: Other ( "u128" ) , & self ) )
1433
+ let mut buf = [ 0u8 ; 57 ] ;
1434
+ let mut writer = format:: Buf :: new( & mut buf) ;
1435
+ fmt:: Write :: write_fmt( & mut writer, format_args!( "integer `{}` as u128" , v) ) . unwrap( ) ;
1436
+ Err ( Error :: invalid_type( Unexpected :: Other ( writer. as_str( ) ) , & self ) )
1431
1437
}
1432
1438
}
1433
1439
Original file line number Diff line number Diff line change @@ -192,7 +192,7 @@ fn test_i128() {
192
192
let error = <& str >:: deserialize ( deserializer) . unwrap_err ( ) ;
193
193
assert_eq ! (
194
194
error. to_string( ) ,
195
- "invalid type: i128, expected a borrowed string" ,
195
+ "invalid type: integer `1` as i128, expected a borrowed string" ,
196
196
) ;
197
197
}
198
198
@@ -372,7 +372,7 @@ fn test_u128() {
372
372
let error = <& str >:: deserialize ( deserializer) . unwrap_err ( ) ;
373
373
assert_eq ! (
374
374
error. to_string( ) ,
375
- "invalid type: u128, expected a borrowed string" ,
375
+ "invalid type: integer `1` as u128, expected a borrowed string" ,
376
376
) ;
377
377
}
378
378
You can’t perform that action at this time.
0 commit comments