@@ -50,13 +50,11 @@ pub struct Range(pub Duration, pub Option<Duration>);
50
50
impl Encodable for Range {
51
51
fn encode < S : Encoder > ( & self , e : & mut S ) -> Result < ( ) , S :: Error > {
52
52
e. emit_tuple ( 2 , |e| {
53
- e. emit_tuple_arg ( 0 , |e| e. emit_i64 ( self . 0 . num_seconds ( ) ) ) . and_then ( |_| {
54
- e. emit_tuple_arg ( 1 , |e| {
55
- e. emit_option ( |e| {
56
- self . 1
57
- . map ( |d| e. emit_option_some ( |e| d. num_seconds ( ) . encode ( e) ) )
58
- . unwrap_or_else ( || e. emit_option_none ( ) )
59
- } )
53
+ e. emit_tuple_arg ( 0 , |e| e. emit_i64 ( self . 0 . num_seconds ( ) ) ) ?;
54
+ e. emit_tuple_arg ( 1 , |e| {
55
+ e. emit_option ( |e| match self . 1 {
56
+ Some ( d) => e. emit_option_some ( |e| d. num_seconds ( ) . encode ( e) ) ,
57
+ None => e. emit_option_none ( ) ,
60
58
} )
61
59
} )
62
60
} )
@@ -71,11 +69,12 @@ impl Default for Range {
71
69
72
70
impl fmt:: Display for Range {
73
71
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
74
- self . 0
75
- . num_seconds ( )
76
- . fmt ( f)
77
- . and_then ( |_| f. write_str ( ":" ) )
78
- . and_then ( |_| self . 1 . map ( |v| v. num_seconds ( ) . fmt ( f) ) . unwrap_or ( Ok ( ( ) ) ) )
72
+ self . 0 . num_seconds ( ) . fmt ( f) ?;
73
+ f. write_str ( ":" ) ?;
74
+ if let Some ( v) = self . 1 {
75
+ v. num_seconds ( ) . fmt ( f) ?;
76
+ }
77
+ Ok ( ( ) )
79
78
}
80
79
}
81
80
@@ -116,32 +115,25 @@ pub struct Song {
116
115
impl Encodable for Song {
117
116
fn encode < S : Encoder > ( & self , e : & mut S ) -> Result < ( ) , S :: Error > {
118
117
e. emit_struct ( "Song" , 8 , |e| {
119
- e. emit_struct_field ( "file" , 0 , |e| self . file . encode ( e) )
120
- . and_then ( |_| e. emit_struct_field ( "name" , 1 , |e| self . name . encode ( e) ) )
121
- . and_then ( |_| e. emit_struct_field ( "title" , 2 , |e| self . title . encode ( e) ) )
122
- . and_then ( |_| {
123
- e. emit_struct_field ( "last_mod" , 3 , |e| {
124
- e. emit_option ( |e| {
125
- self . last_mod
126
- . as_ref ( )
127
- . map ( |m| e. emit_option_some ( |e| m. to_timespec ( ) . sec . encode ( e) ) )
128
- . unwrap_or_else ( || e. emit_option_none ( ) )
129
- } )
118
+ e. emit_struct_field ( "file" , 0 , |e| self . file . encode ( e) ) ?;
119
+ e. emit_struct_field ( "name" , 1 , |e| self . name . encode ( e) ) ?;
120
+ e. emit_struct_field ( "title" , 2 , |e| self . title . encode ( e) ) ?;
121
+ e. emit_struct_field ( "last_mod" , 3 , |e| {
122
+ e. emit_option ( |e| match self . last_mod {
123
+ Some ( m) => e. emit_option_some ( |e| m. to_timespec ( ) . sec . encode ( e) ) ,
124
+ None => e. emit_option_none ( ) ,
130
125
} )
131
- } )
132
- . and_then ( |_| {
133
- e. emit_struct_field ( "duration" , 4 , |e| {
134
- e. emit_option ( |e| {
135
- self . duration
136
- . as_ref ( )
137
- . map ( |d| e. emit_option_some ( |e| d. num_seconds ( ) . encode ( e) ) )
138
- . unwrap_or_else ( || e. emit_option_none ( ) )
139
- } )
126
+ } ) ?;
127
+ e. emit_struct_field ( "duration" , 4 , |e| {
128
+ e. emit_option ( |e| match self . duration {
129
+ Some ( d) => e. emit_option_some ( |e| d. num_seconds ( ) . encode ( e) ) ,
130
+ None => e. emit_option_none ( ) ,
140
131
} )
141
- } )
142
- . and_then ( |_| e. emit_struct_field ( "place" , 5 , |e| self . place . encode ( e) ) )
143
- . and_then ( |_| e. emit_struct_field ( "range" , 6 , |e| self . range . encode ( e) ) )
144
- . and_then ( |_| e. emit_struct_field ( "tags" , 7 , |e| self . tags . encode ( e) ) )
132
+ } ) ?;
133
+ e. emit_struct_field ( "place" , 5 , |e| self . place . encode ( e) ) ?;
134
+ e. emit_struct_field ( "range" , 6 , |e| self . range . encode ( e) ) ?;
135
+ e. emit_struct_field ( "tags" , 7 , |e| self . tags . encode ( e) ) ?;
136
+ Ok ( ( ) )
145
137
} )
146
138
}
147
139
}
0 commit comments