1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! Separated IPv4/IPv6 peer collections.
use cratePeerId;
use crateAHashMap;
use crateTorrentPeer;
use Serialize;
/// Peer collections separated by IP version and peer type.
///
/// This struct organizes peers into four categories for efficient announce
/// response generation. BitTorrent clients typically only want peers of
/// the same IP version as themselves.
///
/// # Structure
///
/// Peers are organized into four maps:
/// - `seeds_ipv4`: IPv4 peers with complete copy
/// - `seeds_ipv6`: IPv6 peers with complete copy
/// - `peers_ipv4`: IPv4 peers still downloading
/// - `peers_ipv6`: IPv6 peers still downloading
///
/// # Usage
///
/// This struct is typically used when returning peers from an announce request,
/// allowing the tracker to filter by IP version (BEP 7: IPv6 Tracker Extension).
///
/// # Example
///
/// ```rust,ignore
/// use torrust_actix::tracker::structs::torrent_peers::TorrentPeers;
///
/// // Get IPv4 peers only
/// let ipv4_count = peers.seeds_ipv4.len() + peers.peers_ipv4.len();
///
/// // Get total seed count
/// let total_seeds = peers.seeds_ipv4.len() + peers.seeds_ipv6.len();
/// ```