spill 0.5.2

Modern torrent client
Documentation
use super::*;

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(in crate::engine) enum Stall {
    NoProgress,
    NoPeers,
    AwaitingPeers,
}

#[derive(Debug)]
pub(in crate::engine) enum Event {
    Stalled(Stall),
    PeerReady(ConnectionId),
    Block {
        index: u32,
        begin: u32,
        length: u32,
    },
    IgnoredBlock {
        index: u32,
        begin: u32,
    },
    Verified(u32),
    PieceRetry {
        index: u32,
        retry: u32,
    },
    PeerClosed {
        connection: ConnectionId,
        result: io::Result<()>,
    },
    Complete,
}
#[derive(Clone, PartialEq, Eq)]
pub(in crate::engine) struct Progress {
    pub(super) total_bytes: u64,
    pub(super) initial_verified_bytes: u64,
    pub(super) verified_bytes: u64,
    pub(super) wanted_bytes: u64,
    pub(super) wanted_verified_bytes: u64,
    pub(super) received_payload_bytes: u64,
    pub(super) hash_failed_bytes: u64,
    pub(super) hash_failed_pieces: u64,
}
impl Progress {
    pub(in crate::engine) fn total_bytes(&self) -> u64 {
        self.total_bytes
    }
    pub(in crate::engine) fn verified_bytes(&self) -> u64 {
        self.verified_bytes
    }
    pub(in crate::engine) fn wanted_bytes(&self) -> u64 {
        self.wanted_bytes
    }
    pub(in crate::engine) fn wanted_verified_bytes(&self) -> u64 {
        self.wanted_verified_bytes
    }
    pub(in crate::engine) fn remaining_bytes(&self) -> u64 {
        self.total_bytes - self.verified_bytes
    }
    pub(in crate::engine) fn hash_failed_bytes(&self) -> u64 {
        self.hash_failed_bytes
    }
    pub(in crate::engine) fn hash_failed_pieces(&self) -> u64 {
        self.hash_failed_pieces
    }
    pub(in crate::engine) fn received_payload_bytes(&self) -> u64 {
        self.received_payload_bytes
    }
}
impl fmt::Debug for Progress {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("Progress")
            .field("total_bytes", &self.total_bytes)
            .field("initial_verified_bytes", &self.initial_verified_bytes)
            .field("verified_bytes", &self.verified_bytes)
            .field("received_payload_bytes", &self.received_payload_bytes)
            .finish_non_exhaustive()
    }
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub(in crate::engine) struct Diagnostics {
    pub(in crate::engine) peers: usize,
    pub(in crate::engine) established_peers: usize,
    pub(in crate::engine) unchoked_peers: usize,
    pub(in crate::engine) interested_peers: usize,
    pub(in crate::engine) remote_interested_peers: usize,
    pub(in crate::engine) retiring_peers: usize,
    pub(in crate::engine) output_blocked_peers: usize,
    pub(in crate::engine) upload_unchoked_peers: usize,
    pub(in crate::engine) pending_upload_requests: usize,
    pub(in crate::engine) outstanding_requests: usize,
    pub(in crate::engine) assigned_requests: usize,
    pub(in crate::engine) waiting_requests: usize,
    pub(in crate::engine) requests_at_retry_limit: usize,
    pub(in crate::engine) current_piece: Option<u32>,
    pub(in crate::engine) piece_retries_remaining: Option<u32>,
    pub(in crate::engine) hashing: bool,
    pub(in crate::engine) stalled: Option<Stall>,
    pub(in crate::engine) failed: bool,
}