Skip to content

Commit 0e737c1

Browse files
committed
refactor: torrent_resource to torrent
move peer resource into own file
1 parent 0733938 commit 0e737c1

File tree

8 files changed

+79
-32
lines changed

8 files changed

+79
-32
lines changed

src/api/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
pub mod resources;
1+
pub mod resource;
22
pub mod server;
File renamed without changes.

src/api/resources/mod.rs renamed to src/api/resource/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
//! WIP. Not all endpoints have their resource structs.
44
//!
55
//! - [x] `AuthKeys`
6-
//! - [ ] `TorrentResource`, `TorrentListItemResource`, `TorrentPeerResource`, `PeerIdResource`
6+
//! - [ ] `Torrent`, `ListItem`, `Peer`, `PeerId`
77
//! - [ ] `StatsResource`
88
//! - [ ] ...
99
1010
pub mod auth_key;
11+
pub mod peer;
1112
pub mod stats;
12-
pub mod torrent_resource;
13+
pub mod torrent;

src/api/resource/peer.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
use crate::tracker;
4+
5+
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
6+
pub struct Peer {
7+
pub peer_id: Id,
8+
pub peer_addr: String,
9+
#[deprecated(since = "2.0.0", note = "please use `updated_milliseconds_ago` instead")]
10+
pub updated: u128,
11+
pub updated_milliseconds_ago: u128,
12+
pub uploaded: i64,
13+
pub downloaded: i64,
14+
pub left: i64,
15+
pub event: String,
16+
}
17+
18+
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
19+
pub struct Id {
20+
pub id: Option<String>,
21+
pub client: Option<String>,
22+
}
23+
24+
impl From<tracker::peer::Id> for Id {
25+
fn from(peer_id: tracker::peer::Id) -> Self {
26+
Id {
27+
id: peer_id.get_id(),
28+
client: peer_id.get_client_name().map(std::string::ToString::to_string),
29+
}
30+
}
31+
}
32+
33+
impl From<tracker::peer::Peer> for Peer {
34+
#[allow(deprecated)]
35+
fn from(peer: tracker::peer::Peer) -> Self {
36+
Peer {
37+
peer_id: Id::from(peer.peer_id),
38+
peer_addr: peer.peer_addr.to_string(),
39+
updated: peer.updated.as_millis(),
40+
updated_milliseconds_ago: peer.updated.as_millis(),
41+
uploaded: peer.uploaded.0,
42+
downloaded: peer.downloaded.0,
43+
left: peer.left.0,
44+
event: format!("{:?}", peer.event),
45+
}
46+
}
47+
}
File renamed without changes.

src/api/resources/torrent_resource.rs renamed to src/api/resource/torrent.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
use serde::{Deserialize, Serialize};
22

3-
use crate::tracker::peer::{self, Peer};
3+
use crate::tracker::peer;
44

55
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
6-
pub struct TorrentResource {
6+
pub struct Torrent {
77
pub info_hash: String,
88
pub seeders: u32,
99
pub completed: u32,
1010
pub leechers: u32,
1111
#[serde(skip_serializing_if = "Option::is_none")]
12-
pub peers: Option<Vec<TorrentPeerResource>>,
12+
pub peers: Option<Vec<Peer>>,
1313
}
1414

1515
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
16-
pub struct TorrentListItemResource {
16+
pub struct ListItem {
1717
pub info_hash: String,
1818
pub seeders: u32,
1919
pub completed: u32,
2020
pub leechers: u32,
2121
// todo: this is always None. Remove field from endpoint?
22-
pub peers: Option<Vec<TorrentPeerResource>>,
22+
pub peers: Option<Vec<Peer>>,
2323
}
2424

2525
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
26-
pub struct TorrentPeerResource {
26+
pub struct Peer {
2727
pub peer_id: PeerIdResource,
2828
pub peer_addr: String,
2929
#[deprecated(since = "2.0.0", note = "please use `updated_milliseconds_ago` instead")]
@@ -50,10 +50,10 @@ impl From<peer::Id> for PeerIdResource {
5050
}
5151
}
5252

53-
impl From<Peer> for TorrentPeerResource {
53+
impl From<peer::Peer> for Peer {
5454
#[allow(deprecated)]
55-
fn from(peer: Peer) -> Self {
56-
TorrentPeerResource {
55+
fn from(peer: peer::Peer) -> Self {
56+
Peer {
5757
peer_id: PeerIdResource::from(peer.peer_id),
5858
peer_addr: peer.peer_addr.to_string(),
5959
updated: peer.updated.as_millis(),

src/api/server.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ use std::time::Duration;
77
use serde::{Deserialize, Serialize};
88
use warp::{filters, reply, serve, Filter};
99

10-
use super::resources::auth_key::AuthKey;
11-
use super::resources::stats::Stats;
12-
use super::resources::torrent_resource::{TorrentListItemResource, TorrentPeerResource, TorrentResource};
10+
use super::resource::auth_key::AuthKey;
11+
use super::resource::stats::Stats;
12+
use super::resource::torrent::{ListItem, Peer, Torrent};
1313
use crate::protocol::info_hash::InfoHash;
1414
use crate::tracker;
1515

@@ -81,7 +81,7 @@ pub fn start(socket_addr: SocketAddr, tracker: &Arc<tracker::Tracker>) -> impl w
8181
.iter()
8282
.map(|(info_hash, torrent_entry)| {
8383
let (seeders, completed, leechers) = torrent_entry.get_stats();
84-
TorrentListItemResource {
84+
ListItem {
8585
info_hash: info_hash.to_string(),
8686
seeders,
8787
completed,
@@ -179,9 +179,9 @@ pub fn start(socket_addr: SocketAddr, tracker: &Arc<tracker::Tracker>) -> impl w
179179

180180
let peers = torrent_entry.get_peers(None);
181181

182-
let peer_resources = peers.iter().map(|peer| TorrentPeerResource::from(**peer)).collect();
182+
let peer_resources = peers.iter().map(|peer| Peer::from(**peer)).collect();
183183

184-
Ok(reply::json(&TorrentResource {
184+
Ok(reply::json(&Torrent {
185185
info_hash: info_hash.to_string(),
186186
seeders,
187187
completed,

tests/api.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,15 @@ mod tracker_api {
1616
use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes};
1717
use reqwest::Response;
1818
use tokio::task::JoinHandle;
19-
use torrust_tracker::api::resources::auth_key::AuthKey;
20-
use torrust_tracker::api::resources::stats::Stats;
21-
use torrust_tracker::api::resources::torrent_resource::{TorrentListItemResource, TorrentPeerResource, TorrentResource};
19+
use torrust_tracker::api::resource::auth_key::AuthKey;
20+
use torrust_tracker::api::resource::stats::Stats;
21+
use torrust_tracker::api::resource::torrent::{self, Torrent};
2222
use torrust_tracker::config::Configuration;
2323
use torrust_tracker::jobs::tracker_api;
2424
use torrust_tracker::protocol::clock::DurationSinceUnixEpoch;
2525
use torrust_tracker::protocol::info_hash::InfoHash;
26-
use torrust_tracker::tracker::auth;
27-
use torrust_tracker::tracker::peer::{self, Peer};
2826
use torrust_tracker::tracker::statistics::Keeper;
27+
use torrust_tracker::tracker::{auth, peer};
2928
use torrust_tracker::{ephemeral_instance_keys, logging, static_time, tracker};
3029

3130
use crate::common::ephemeral_random_port;
@@ -104,7 +103,7 @@ mod tracker_api {
104103

105104
assert_eq!(
106105
torrent_resource,
107-
TorrentResource {
106+
Torrent {
108107
info_hash: "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_string(),
109108
seeders: 1,
110109
completed: 0,
@@ -135,7 +134,7 @@ mod tracker_api {
135134

136135
assert_eq!(
137136
torrent_resources,
138-
vec![TorrentListItemResource {
137+
vec![torrent::ListItem {
139138
info_hash: "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_string(),
140139
seeders: 1,
141140
completed: 0,
@@ -187,8 +186,8 @@ mod tracker_api {
187186
);
188187
}
189188

190-
fn sample_torrent_peer() -> (Peer, TorrentPeerResource) {
191-
let torrent_peer = Peer {
189+
fn sample_torrent_peer() -> (peer::Peer, torrent::Peer) {
190+
let torrent_peer = peer::Peer {
192191
peer_id: peer::Id(*b"-qB00000000000000000"),
193192
peer_addr: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(126, 0, 0, 1)), 8080),
194193
updated: DurationSinceUnixEpoch::new(1_669_397_478_934, 0),
@@ -197,7 +196,7 @@ mod tracker_api {
197196
left: NumberOfBytes(0),
198197
event: AnnounceEvent::Started,
199198
};
200-
let torrent_peer_resource = TorrentPeerResource::from(torrent_peer);
199+
let torrent_peer_resource = torrent::Peer::from(torrent_peer);
201200

202201
(torrent_peer, torrent_peer_resource)
203202
}
@@ -326,7 +325,7 @@ mod tracker_api {
326325
reqwest::Client::new().post(url.clone()).send().await.unwrap()
327326
}
328327

329-
pub async fn get_torrent(&self, info_hash: &str) -> TorrentResource {
328+
pub async fn get_torrent(&self, info_hash: &str) -> Torrent {
330329
let url = format!(
331330
"http://{}/api/torrent/{}?token={}",
332331
&self.connection_info.bind_address, &info_hash, &self.connection_info.api_token
@@ -338,12 +337,12 @@ mod tracker_api {
338337
.send()
339338
.await
340339
.unwrap()
341-
.json::<TorrentResource>()
340+
.json::<Torrent>()
342341
.await
343342
.unwrap()
344343
}
345344

346-
pub async fn get_torrents(&self) -> Vec<TorrentListItemResource> {
345+
pub async fn get_torrents(&self) -> Vec<torrent::ListItem> {
347346
let url = format!(
348347
"http://{}/api/torrents?token={}",
349348
&self.connection_info.bind_address, &self.connection_info.api_token
@@ -355,7 +354,7 @@ mod tracker_api {
355354
.send()
356355
.await
357356
.unwrap()
358-
.json::<Vec<TorrentListItemResource>>()
357+
.json::<Vec<torrent::ListItem>>()
359358
.await
360359
.unwrap()
361360
}

0 commit comments

Comments
 (0)