Skip to content

Commit b974ce0

Browse files
committed
refactor: [#61] use TorrentListItemResource in torrent list API endpoint
1 parent 284c91b commit b974ce0

File tree

3 files changed

+15
-17
lines changed

3 files changed

+15
-17
lines changed

src/api/resources/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
//! WIP. Not all endpoints have their resource structs.
44
//!
55
//! - [x] AuthKeys
6-
//! - [ ] ...
7-
//! - [ ] ...
6+
//! - [ ] TorrentResource, TorrentListItemResource, TorrentPeerResource, PeerIdResource
7+
//! - [ ] StatsResource
88
//! - [ ] ...
99
pub mod auth_key_resource;
1010
pub mod torrent_resource;

src/api/resources/torrent_resource.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ pub struct TorrentResource {
1313
pub peers: Option<Vec<TorrentPeerResource>>,
1414
}
1515

16+
#[derive(Serialize, Deserialize, Debug, PartialEq)]
17+
pub struct TorrentListItemResource {
18+
pub info_hash: String,
19+
pub seeders: u32,
20+
pub completed: u32,
21+
pub leechers: u32,
22+
// todo: this is always None. Remove field from endpoint?
23+
pub peers: Option<Vec<TorrentPeerResource>>,
24+
}
25+
1626
#[derive(Serialize, Deserialize, Debug, PartialEq)]
1727
pub struct TorrentPeerResource {
1828
pub peer_id: PeerIdResource,

src/api/server.rs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ use serde::{Deserialize, Serialize};
88
use warp::{filters, reply, serve, Filter};
99

1010
use super::resources::auth_key_resource::AuthKeyResource;
11-
use super::resources::torrent_resource::{TorrentPeerResource, TorrentResource};
12-
use crate::peer::TorrentPeer;
11+
use super::resources::torrent_resource::{TorrentListItemResource, TorrentPeerResource, TorrentResource};
1312
use crate::protocol::common::*;
1413
use crate::tracker::TorrentTracker;
1514

@@ -19,16 +18,6 @@ struct TorrentInfoQuery {
1918
limit: Option<u32>,
2019
}
2120

22-
#[derive(Serialize)]
23-
struct Torrent<'a> {
24-
info_hash: &'a InfoHash,
25-
seeders: u32,
26-
completed: u32,
27-
leechers: u32,
28-
#[serde(skip_serializing_if = "Option::is_none")]
29-
peers: Option<Vec<&'a TorrentPeer>>,
30-
}
31-
3221
#[derive(Serialize)]
3322
struct Stats {
3423
torrents: u32,
@@ -110,9 +99,8 @@ pub fn start(socket_addr: SocketAddr, tracker: Arc<TorrentTracker>) -> impl warp
11099
.iter()
111100
.map(|(info_hash, torrent_entry)| {
112101
let (seeders, completed, leechers) = torrent_entry.get_stats();
113-
// todo: use TorrentResource
114-
Torrent {
115-
info_hash,
102+
TorrentListItemResource {
103+
info_hash: info_hash.to_string(),
116104
seeders,
117105
completed,
118106
leechers,

0 commit comments

Comments
 (0)