@@ -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 ,
@@ -1213,19 +1214,19 @@ impl From<BigUint> for BigInt {
1213
1214
1214
1215
#[ cfg( feature = "serde" ) ]
1215
1216
impl serde:: Serialize for BigInt {
1216
- fn serialize < S > ( & self , serializer : & mut S ) -> Result < ( ) , S :: Error >
1217
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
1217
1218
where S : serde:: Serializer
1218
1219
{
1219
1220
( self . sign , & self . data ) . serialize ( serializer)
1220
1221
}
1221
1222
}
1222
1223
1223
1224
#[ cfg( feature = "serde" ) ]
1224
- impl serde:: Deserialize for BigInt {
1225
- fn deserialize < D > ( deserializer : & mut D ) -> Result < Self , D :: Error >
1226
- where D : serde:: Deserializer
1225
+ impl < ' de > serde:: Deserialize < ' de > for BigInt {
1226
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
1227
+ where D : serde:: Deserializer < ' de >
1227
1228
{
1228
- let ( sign, data) = try! ( serde:: Deserialize :: deserialize ( deserializer) ) ;
1229
+ let ( sign, data) = serde:: Deserialize :: deserialize ( deserializer) ? ;
1229
1230
Ok ( BigInt {
1230
1231
sign : sign,
1231
1232
data : data,
@@ -1320,14 +1321,15 @@ pub trait RandBigInt {
1320
1321
#[ cfg( any( feature = "rand" , test) ) ]
1321
1322
impl < R : Rng > RandBigInt for R {
1322
1323
fn gen_biguint ( & mut self , bit_size : usize ) -> BigUint {
1323
- let ( digits, rem) = bit_size. div_rem ( & big_digit:: BITS ) ;
1324
+ use super :: big_digit:: BITS ;
1325
+ let ( digits, rem) = bit_size. div_rem ( & BITS ) ;
1324
1326
let mut data = Vec :: with_capacity ( digits + 1 ) ;
1325
1327
for _ in 0 ..digits {
1326
1328
data. push ( self . gen ( ) ) ;
1327
1329
}
1328
1330
if rem > 0 {
1329
1331
let final_digit: BigDigit = self . gen ( ) ;
1330
- data. push ( final_digit >> ( big_digit :: BITS - rem) ) ;
1332
+ data. push ( final_digit >> ( BITS - rem) ) ;
1331
1333
}
1332
1334
BigUint :: new ( data)
1333
1335
}
0 commit comments