use gen_value::unmanaged::UnmanagedGenVec;
use crate::{conn, peer, protocol};
#[derive(Debug, Default, Clone, Copy)]
pub struct Metrics {
pub sent: protocol::Metrics,
pub received: protocol::Metrics,
}
impl core::ops::Add<conn::Metrics> for Metrics {
type Output = Metrics;
fn add(mut self, rhs: conn::Metrics) -> Metrics {
self.sent += rhs.sent;
self.received += rhs.received;
self
}
}
impl core::ops::AddAssign<conn::Metrics> for Metrics {
fn add_assign(&mut self, rhs: conn::Metrics) {
self.sent += rhs.sent;
self.received += rhs.received;
}
}
#[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct SessionId<G, I> {
pub index: I,
pub gen: G,
}
impl<G, I> From<(I, G)> for SessionId<G, I> {
fn from(value: (I, G)) -> Self {
Self {
index: value.0,
gen: value.1,
}
}
}
impl<G, I> From<SessionId<G, I>> for (I, G) {
fn from(value: SessionId<G, I>) -> Self {
(value.index, value.gen)
}
}
pub type SessionIdGenVec<T, PeerGen, PeerIndex> =
UnmanagedGenVec<T, PeerGen, PeerIndex, SessionId<PeerGen, PeerIndex>>;
pub type SessionTorrentPeerId<PeerGen, TorrentGen, PeerIndex, TorrentIndex> = (
SessionId<TorrentGen, TorrentIndex>,
peer::SessionId<PeerGen, PeerIndex>,
);