use std::fmt;
pub trait TransferCounter: Copy + Ord + fmt::Debug + fmt::Display {
const ZERO: Self;
fn checked_add_chunk(self, chunk_len: usize) -> Option<Self>;
}
impl TransferCounter for usize {
const ZERO: Self = 0;
#[inline]
fn checked_add_chunk(self, chunk_len: usize) -> Option<Self> {
self.checked_add(chunk_len)
}
}
impl TransferCounter for u64 {
const ZERO: Self = 0;
#[inline]
fn checked_add_chunk(self, chunk_len: usize) -> Option<Self> {
self.checked_add(u64::try_from(chunk_len).ok()?)
}
}
impl TransferCounter for u128 {
const ZERO: Self = 0;
#[inline]
fn checked_add_chunk(self, chunk_len: usize) -> Option<Self> {
self.checked_add(chunk_len as u128)
}
}