@@ -23,7 +23,6 @@ use traits::{ToPrimitive, FromPrimitive, Num, CheckedAdd, CheckedSub,
23
23
use self :: Sign :: { Minus , NoSign , Plus } ;
24
24
25
25
use super :: ParseBigIntError ;
26
- use super :: big_digit;
27
26
use super :: big_digit:: { BigDigit , DoubleBigDigit } ;
28
27
use biguint;
29
28
use biguint:: to_str_radix_reversed;
@@ -38,7 +37,6 @@ mod bigint_tests;
38
37
39
38
/// A Sign is a `BigInt`'s composing element.
40
39
#[ derive( PartialEq , PartialOrd , Eq , Ord , Copy , Clone , Debug , Hash ) ]
41
- #[ cfg_attr( feature = "rustc-serialize" , derive( RustcEncodable , RustcDecodable ) ) ]
42
40
pub enum Sign {
43
41
Minus ,
44
42
NoSign ,
@@ -74,7 +72,7 @@ impl Mul<Sign> for Sign {
74
72
75
73
#[ cfg( feature = "serde" ) ]
76
74
impl serde:: Serialize for Sign {
77
- fn serialize < S > ( & self , serializer : & mut S ) -> Result < ( ) , S :: Error >
75
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
78
76
where S : serde:: Serializer
79
77
{
80
78
match * self {
@@ -86,25 +84,28 @@ impl serde::Serialize for Sign {
86
84
}
87
85
88
86
#[ cfg( feature = "serde" ) ]
89
- impl serde:: Deserialize for Sign {
90
- fn deserialize < D > ( deserializer : & mut D ) -> Result < Self , D :: Error >
91
- where D : serde:: Deserializer
87
+ impl < ' de > serde:: Deserialize < ' de > for Sign {
88
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
89
+ where D : serde:: Deserializer < ' de >
92
90
{
93
91
use serde:: de:: Error ;
92
+ use serde:: de:: Unexpected ;
94
93
95
- let sign: i8 = try! ( serde:: Deserialize :: deserialize ( deserializer) ) ;
94
+ let sign: i8 = serde:: Deserialize :: deserialize ( deserializer) ? ;
96
95
match sign {
97
96
-1 => Ok ( Sign :: Minus ) ,
98
97
0 => Ok ( Sign :: NoSign ) ,
99
98
1 => Ok ( Sign :: Plus ) ,
100
- _ => Err ( D :: Error :: invalid_value ( "sign must be -1, 0, or 1" ) ) ,
99
+ _ => Err ( D :: Error :: invalid_value (
100
+ Unexpected :: Signed ( sign. into ( ) ) ,
101
+ & "a sign of -1, 0, or 1" ,
102
+ ) ) ,
101
103
}
102
104
}
103
105
}
104
106
105
107
/// A big signed integer type.
106
108
#[ derive( Clone , Debug , Hash ) ]
107
- #[ cfg_attr( feature = "rustc-serialize" , derive( RustcEncodable , RustcDecodable ) ) ]
108
109
pub struct BigInt {
109
110
sign : Sign ,
110
111
data : BigUint ,
@@ -1200,19 +1201,19 @@ impl From<BigUint> for BigInt {
1200
1201
1201
1202
#[ cfg( feature = "serde" ) ]
1202
1203
impl serde:: Serialize for BigInt {
1203
- fn serialize < S > ( & self , serializer : & mut S ) -> Result < ( ) , S :: Error >
1204
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
1204
1205
where S : serde:: Serializer
1205
1206
{
1206
1207
( self . sign , & self . data ) . serialize ( serializer)
1207
1208
}
1208
1209
}
1209
1210
1210
1211
#[ cfg( feature = "serde" ) ]
1211
- impl serde:: Deserialize for BigInt {
1212
- fn deserialize < D > ( deserializer : & mut D ) -> Result < Self , D :: Error >
1213
- where D : serde:: Deserializer
1212
+ impl < ' de > serde:: Deserialize < ' de > for BigInt {
1213
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1214
+ where D : serde:: Deserializer < ' de >
1214
1215
{
1215
- let ( sign, data) = try! ( serde:: Deserialize :: deserialize ( deserializer) ) ;
1216
+ let ( sign, data) = serde:: Deserialize :: deserialize ( deserializer) ? ;
1216
1217
Ok ( BigInt {
1217
1218
sign : sign,
1218
1219
data : data,
@@ -1307,14 +1308,15 @@ pub trait RandBigInt {
1307
1308
#[ cfg( any( feature = "rand" , test) ) ]
1308
1309
impl < R : Rng > RandBigInt for R {
1309
1310
fn gen_biguint ( & mut self , bit_size : usize ) -> BigUint {
1310
- let ( digits, rem) = bit_size. div_rem ( & big_digit:: BITS ) ;
1311
+ use super :: big_digit:: BITS ;
1312
+ let ( digits, rem) = bit_size. div_rem ( & BITS ) ;
1311
1313
let mut data = Vec :: with_capacity ( digits + 1 ) ;
1312
1314
for _ in 0 ..digits {
1313
1315
data. push ( self . gen ( ) ) ;
1314
1316
}
1315
1317
if rem > 0 {
1316
1318
let final_digit: BigDigit = self . gen ( ) ;
1317
- data. push ( final_digit >> ( big_digit :: BITS - rem) ) ;
1319
+ data. push ( final_digit >> ( BITS - rem) ) ;
1318
1320
}
1319
1321
BigUint :: new ( data)
1320
1322
}
0 commit comments