@@ -357,7 +357,7 @@ where
357
357
Minute => ( 2 , false , Parsed :: set_minute) ,
358
358
Second => ( 2 , false , Parsed :: set_second) ,
359
359
Nanosecond => ( 9 , false , Parsed :: set_nanosecond) ,
360
- Timestamp => ( usize:: MAX , false , Parsed :: set_timestamp) ,
360
+ Timestamp => ( usize:: MAX , true , Parsed :: set_timestamp) ,
361
361
362
362
// for the future expansion
363
363
Internal ( ref int) => match int. _dummy { } ,
@@ -366,8 +366,7 @@ where
366
366
s = s. trim_start ( ) ;
367
367
let v = if signed {
368
368
if s. starts_with ( '-' ) {
369
- let v = try_consume ! ( scan:: number( & s[ 1 ..] , 1 , usize :: MAX ) ) ;
370
- 0i64 . checked_sub ( v) . ok_or ( OUT_OF_RANGE ) ?
369
+ try_consume ! ( scan:: negative_number( & s[ 1 ..] , 1 , usize :: MAX ) )
371
370
} else if s. starts_with ( '+' ) {
372
371
try_consume ! ( scan:: number( & s[ 1 ..] , 1 , usize :: MAX ) )
373
372
} else {
@@ -765,6 +764,7 @@ mod tests {
765
764
check ( " + 42" , & [ Space ( " " ) , num ( Year ) ] , Err ( INVALID ) ) ;
766
765
check ( "-" , & [ num ( Year ) ] , Err ( TOO_SHORT ) ) ;
767
766
check ( "+" , & [ num ( Year ) ] , Err ( TOO_SHORT ) ) ;
767
+ check ( "-9223372036854775808" , & [ num ( Timestamp ) ] , parsed ! ( timestamp: i64 :: MIN ) ) ;
768
768
769
769
// unsigned numeric
770
770
check ( "345" , & [ num ( Ordinal ) ] , parsed ! ( ordinal: 345 ) ) ;
0 commit comments