1mod udp;
2
3use std::net::SocketAddr;
4use udp::Udp;
5
6#[derive(Default)]
7pub struct Result {
8 pub leechers: u32,
9 pub peers: u32,
10 pub seeders: u32,
11}
12
13pub struct Scrape {
14 udp: Option<Udp>,
15 }
17
18impl Scrape {
19 pub fn init(udp: Option<(Vec<SocketAddr>, Vec<SocketAddr>)>) -> Self {
20 Self {
21 udp: udp.map(|(local, remote)| Udp::init(local, remote)),
22 }
23 }
24
25 pub fn get(&self, info_hash: [u8; 20]) -> Option<Result> {
26 self.udp.as_ref()?;
27 let mut t = Result::default();
28 if let Some(ref u) = self.udp {
29 let r = u.scrape(info_hash).ok()?; t.leechers += r.leechers;
31 t.peers += r.peers;
32 t.seeders += r.seeders;
33 }
34 Some(t)
35 }
36}