@@ -145,15 +145,21 @@ pub enum ParseAnnounceQueryError {
145
145
///
146
146
/// Refer to [BEP 03. The `BitTorrent Protocol` Specification](https://www.bittorrent.org/beps/bep_0003.html)
147
147
/// for more information.
148
- #[ derive( PartialEq , Debug ) ]
148
+ #[ derive( PartialEq , Debug , Clone ) ]
149
149
pub enum Event {
150
150
/// Event sent when a download first begins.
151
151
Started ,
152
+
152
153
/// Event sent when the downloader cease downloading.
153
154
Stopped ,
155
+
154
156
/// Event sent when the download is complete.
155
- /// No `completed` is sent if the file was complete when started
157
+ /// No `completed` is sent if the file was complete when started.
156
158
Completed ,
159
+
160
+ /// It is the same as not being present. If not present, this is one of the
161
+ /// announcements done at regular intervals.
162
+ Empty ,
157
163
}
158
164
159
165
impl FromStr for Event {
@@ -164,6 +170,7 @@ impl FromStr for Event {
164
170
"started" => Ok ( Self :: Started ) ,
165
171
"stopped" => Ok ( Self :: Stopped ) ,
166
172
"completed" => Ok ( Self :: Completed ) ,
173
+ "empty" => Ok ( Self :: Empty ) ,
167
174
_ => Err ( ParseAnnounceQueryError :: InvalidParam {
168
175
param_name : EVENT . to_owned ( ) ,
169
176
param_value : raw_param. to_owned ( ) ,
@@ -179,17 +186,29 @@ impl fmt::Display for Event {
179
186
Event :: Started => write ! ( f, "started" ) ,
180
187
Event :: Stopped => write ! ( f, "stopped" ) ,
181
188
Event :: Completed => write ! ( f, "completed" ) ,
189
+ Event :: Empty => write ! ( f, "empty" ) ,
182
190
}
183
191
}
184
192
}
185
193
186
194
impl From < aquatic_udp_protocol:: request:: AnnounceEvent > for Event {
187
- fn from ( value : aquatic_udp_protocol:: request:: AnnounceEvent ) -> Self {
188
- match value {
195
+ fn from ( event : aquatic_udp_protocol:: request:: AnnounceEvent ) -> Self {
196
+ match event {
189
197
AnnounceEvent :: Started => Self :: Started ,
190
198
AnnounceEvent :: Stopped => Self :: Stopped ,
191
199
AnnounceEvent :: Completed => Self :: Completed ,
192
- AnnounceEvent :: None => panic ! ( "can't convert announce event from aquatic for None variant" ) ,
200
+ AnnounceEvent :: None => Self :: Empty ,
201
+ }
202
+ }
203
+ }
204
+
205
+ impl From < Event > for aquatic_udp_protocol:: request:: AnnounceEvent {
206
+ fn from ( event : Event ) -> Self {
207
+ match event {
208
+ Event :: Started => Self :: Started ,
209
+ Event :: Stopped => Self :: Stopped ,
210
+ Event :: Completed => Self :: Completed ,
211
+ Event :: Empty => Self :: None ,
193
212
}
194
213
}
195
214
}
@@ -399,19 +418,10 @@ pub fn peer_from_request(announce_request: &Announce, peer_ip: &IpAddr) -> peer:
399
418
uploaded : announce_request. uploaded . unwrap_or ( NumberOfBytes :: new ( 0 ) ) ,
400
419
downloaded : announce_request. downloaded . unwrap_or ( NumberOfBytes :: new ( 0 ) ) ,
401
420
left : announce_request. left . unwrap_or ( NumberOfBytes :: new ( 0 ) ) ,
402
- event : convert_to_aquatic_event ( & announce_request. event ) ,
403
- }
404
- }
405
-
406
- #[ must_use]
407
- pub fn convert_to_aquatic_event ( event : & Option < Event > ) -> aquatic_udp_protocol:: request:: AnnounceEvent {
408
- match event {
409
- Some ( event) => match & event {
410
- Event :: Started => AnnounceEvent :: Started ,
411
- Event :: Stopped => AnnounceEvent :: Stopped ,
412
- Event :: Completed => AnnounceEvent :: Completed ,
421
+ event : match & announce_request. event {
422
+ Some ( event) => event. clone ( ) . into ( ) ,
423
+ None => AnnounceEvent :: None ,
413
424
} ,
414
- None => AnnounceEvent :: None ,
415
425
}
416
426
}
417
427
0 commit comments