77
77
//! })));
78
78
//! ```
79
79
80
- use std:: ascii:: AsciiExt ;
81
80
use std:: error:: Error as ErrorTrait ;
82
81
use std:: fmt;
83
82
use std:: str:: FromStr ;
@@ -217,12 +216,12 @@ impl<'line> Rule<'line> {
217
216
/// Attempts to parse the given string into a value of this type.
218
217
pub fn from_str ( input : & str ) -> Result < Rule , Error > {
219
218
if let Some ( caps) = RULE_LINE . captures ( input) {
220
- let name = caps. name ( "name" ) . unwrap ( ) ;
221
- let from_year = try!( caps. name ( "from" ) . unwrap ( ) . parse ( ) ) ;
219
+ let name = caps. name ( "name" ) . unwrap ( ) . as_str ( ) ;
220
+ let from_year = try!( caps. name ( "from" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
222
221
223
222
// The end year can be ‘only’ to indicate that this rule only
224
223
// takes place on that year.
225
- let to_year = match caps. name ( "to" ) . unwrap ( ) {
224
+ let to_year = match caps. name ( "to" ) . unwrap ( ) . as_str ( ) {
226
225
"only" => None ,
227
226
to => Some ( try!( to. parse ( ) ) ) ,
228
227
} ;
@@ -231,16 +230,16 @@ impl<'line> Rule<'line> {
231
230
// should be “-”, so throw an error if it isn’t. (It only exists
232
231
// for compatibility with old versions that used to contain year
233
232
// types.) Sometimes “‐”, a Unicode hyphen, is used as well.
234
- let t = caps. name ( "type" ) . unwrap ( ) ;
233
+ let t = caps. name ( "type" ) . unwrap ( ) . as_str ( ) ;
235
234
if t != "-" && t != "\u{2010} " {
236
235
return Err ( Error :: Fail ) ;
237
236
}
238
237
239
- let month = try!( caps. name ( "in" ) . unwrap ( ) . parse ( ) ) ;
240
- let day = try!( caps. name ( "on" ) . unwrap ( ) . parse ( ) ) ;
241
- let time = try!( caps. name ( "at" ) . unwrap ( ) . parse ( ) ) ;
242
- let time_to_add = try!( caps. name ( "save" ) . unwrap ( ) . parse ( ) ) ;
243
- let letters = match caps. name ( "letters" ) . unwrap ( ) {
238
+ let month = try!( caps. name ( "in" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
239
+ let day = try!( caps. name ( "on" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
240
+ let time = try!( caps. name ( "at" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
241
+ let time_to_add = try!( caps. name ( "save" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
242
+ let letters = match caps. name ( "letters" ) . unwrap ( ) . as_str ( ) {
244
243
"-" => None ,
245
244
l => Some ( l) ,
246
245
} ;
@@ -297,7 +296,7 @@ impl<'line> Zone<'line> {
297
296
/// Attempts to parse the given string into a value of this type.
298
297
pub fn from_str ( input : & str ) -> Result < Zone , Error > {
299
298
if let Some ( caps) = ZONE_LINE . captures ( input) {
300
- let name = caps. name ( "name" ) . unwrap ( ) ;
299
+ let name = caps. name ( "name" ) . unwrap ( ) . as_str ( ) ;
301
300
let info = try!( ZoneInfo :: from_captures ( caps) ) ;
302
301
303
302
Ok ( Zone {
@@ -334,18 +333,18 @@ pub struct ZoneInfo<'line> {
334
333
335
334
impl < ' line > ZoneInfo < ' line > {
336
335
fn from_captures ( caps : Captures < ' line > ) -> Result < ZoneInfo < ' line > , Error > {
337
- let utc_offset = try!( caps. name ( "gmtoff" ) . unwrap ( ) . parse ( ) ) ;
338
- let saving = try!( Saving :: from_str ( caps. name ( "rulessave" ) . unwrap ( ) ) ) ;
339
- let format = caps. name ( "format" ) . unwrap ( ) ;
336
+ let utc_offset = try!( caps. name ( "gmtoff" ) . unwrap ( ) . as_str ( ) . parse ( ) ) ;
337
+ let saving = try!( Saving :: from_str ( caps. name ( "rulessave" ) . unwrap ( ) . as_str ( ) ) ) ;
338
+ let format = caps. name ( "format" ) . unwrap ( ) . as_str ( ) ;
340
339
341
340
// The year, month, day, and time fields are all optional, meaning
342
341
// that it should be impossible to, say, have a defined month but not
343
342
// a defined year.
344
343
let time = match ( caps. name ( "year" ) , caps. name ( "month" ) , caps. name ( "day" ) , caps. name ( "time" ) ) {
345
- ( Some ( y) , Some ( m) , Some ( d) , Some ( t) ) => Some ( ChangeTime :: UntilTime ( try!( y. parse ( ) ) , try!( m. parse ( ) ) , try!( d. parse ( ) ) , try!( t. parse ( ) ) ) ) ,
346
- ( Some ( y) , Some ( m) , Some ( d) , _ ) => Some ( ChangeTime :: UntilDay ( try!( y. parse ( ) ) , try!( m. parse ( ) ) , try!( d. parse ( ) ) ) ) ,
347
- ( Some ( y) , Some ( m) , _ , _ ) => Some ( ChangeTime :: UntilMonth ( try!( y. parse ( ) ) , try!( m. parse ( ) ) ) ) ,
348
- ( Some ( y) , _ , _ , _ ) => Some ( ChangeTime :: UntilYear ( try!( y. parse ( ) ) ) ) ,
344
+ ( Some ( y) , Some ( m) , Some ( d) , Some ( t) ) => Some ( ChangeTime :: UntilTime ( try!( y. as_str ( ) . parse ( ) ) , try!( m. as_str ( ) . parse ( ) ) , try!( d. as_str ( ) . parse ( ) ) , try!( t. as_str ( ) . parse ( ) ) ) ) ,
345
+ ( Some ( y) , Some ( m) , Some ( d) , _ ) => Some ( ChangeTime :: UntilDay ( try!( y. as_str ( ) . parse ( ) ) , try!( m. as_str ( ) . parse ( ) ) , try!( d. as_str ( ) . parse ( ) ) ) ) ,
346
+ ( Some ( y) , Some ( m) , _ , _ ) => Some ( ChangeTime :: UntilMonth ( try!( y. as_str ( ) . parse ( ) ) , try!( m. as_str ( ) . parse ( ) ) ) ) ,
347
+ ( Some ( y) , _ , _ , _ ) => Some ( ChangeTime :: UntilYear ( try!( y. as_str ( ) . parse ( ) ) ) ) ,
349
348
( None , None , None , None ) => None ,
350
349
_ => unreachable ! ( "Out-of-order capturing groups!" ) ,
351
350
} ;
@@ -466,8 +465,8 @@ impl<'line> Link<'line> {
466
465
/// Attempts to parse the given string into a value of this type.
467
466
pub fn from_str ( input : & str ) -> Result < Link , Error > {
468
467
if let Some ( caps) = LINK_LINE . captures ( input) {
469
- let target = caps. name ( "target" ) . unwrap ( ) ;
470
- let name = caps. name ( "name" ) . unwrap ( ) ;
468
+ let target = caps. name ( "target" ) . unwrap ( ) . as_str ( ) ;
469
+ let name = caps. name ( "name" ) . unwrap ( ) . as_str ( ) ;
471
470
Ok ( Link { existing : target, new : name } )
472
471
}
473
472
else {
@@ -643,10 +642,10 @@ impl FromStr for DaySpec {
643
642
644
643
// Check if it’s a relative expression with the regex.
645
644
else if let Some ( caps) = DAY_FIELD . captures ( input) {
646
- let weekday = caps. name ( "weekday" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
647
- let day = caps. name ( "day" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
645
+ let weekday = caps. name ( "weekday" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
646
+ let day = caps. name ( "day" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
648
647
649
- match caps. name ( "sign" ) . unwrap ( ) {
648
+ match caps. name ( "sign" ) . unwrap ( ) . as_str ( ) {
650
649
"<=" => Ok ( DaySpec :: LastOnOrBefore ( weekday, day) ) ,
651
650
">=" => Ok ( DaySpec :: FirstOnOrAfter ( weekday, day) ) ,
652
651
_ => unreachable ! ( "The regex only matches one of those two!" ) ,
@@ -720,20 +719,20 @@ impl FromStr for TimeSpecAndType {
720
719
Ok ( TimeSpecAndType ( TimeSpec :: Hours ( input. parse ( ) . unwrap ( ) ) , TimeType :: Wall ) )
721
720
}
722
721
else if let Some ( caps) = HM_FIELD . captures ( input) {
723
- let sign : i8 = if caps. name ( "sign" ) . unwrap ( ) == "-" { -1 } else { 1 } ;
724
- let hour : i8 = caps. name ( "hour" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
725
- let minute : i8 = caps. name ( "minute" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
726
- let flag = caps. name ( "flag" ) . and_then ( |c| parse_time_type ( & c[ 0 ..1 ] ) )
722
+ let sign : i8 = if caps. name ( "sign" ) . unwrap ( ) . as_str ( ) == "-" { -1 } else { 1 } ;
723
+ let hour : i8 = caps. name ( "hour" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
724
+ let minute : i8 = caps. name ( "minute" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
725
+ let flag = caps. name ( "flag" ) . and_then ( |c| parse_time_type ( & c. as_str ( ) [ 0 ..1 ] ) )
727
726
. unwrap_or ( TimeType :: Wall ) ;
728
727
729
728
Ok ( TimeSpecAndType ( TimeSpec :: HoursMinutes ( hour * sign, minute * sign) , flag) )
730
729
}
731
730
else if let Some ( caps) = HMS_FIELD . captures ( input) {
732
- let sign : i8 = if caps. name ( "sign" ) . unwrap ( ) == "-" { -1 } else { 1 } ;
733
- let hour : i8 = caps. name ( "hour" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
734
- let minute : i8 = caps. name ( "minute" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
735
- let second : i8 = caps. name ( "second" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
736
- let flag = caps. name ( "flag" ) . and_then ( |c| parse_time_type ( & c[ 0 ..1 ] ) )
731
+ let sign : i8 = if caps. name ( "sign" ) . unwrap ( ) . as_str ( ) == "-" { -1 } else { 1 } ;
732
+ let hour : i8 = caps. name ( "hour" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
733
+ let minute : i8 = caps. name ( "minute" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
734
+ let second : i8 = caps. name ( "second" ) . unwrap ( ) . as_str ( ) . parse ( ) . unwrap ( ) ;
735
+ let flag = caps. name ( "flag" ) . and_then ( |c| parse_time_type ( & c. as_str ( ) [ 0 ..1 ] ) )
737
736
. unwrap_or ( TimeType :: Wall ) ;
738
737
739
738
Ok ( TimeSpecAndType ( TimeSpec :: HoursMinutesSeconds ( hour * sign, minute * sign, second * sign) , flag) )
0 commit comments