use sbor::Sbor;
pub type ValidatorIndex = u8;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Sbor)]
#[sbor(transparent)]
pub struct Epoch(u64);
impl Epoch {
pub fn zero() -> Self {
Self::of(0)
}
pub fn of(number: u64) -> Self {
Self(number)
}
pub fn number(&self) -> u64 {
self.0
}
pub fn next(&self) -> Option<Self> {
self.0.checked_add(1).map(Self)
}
pub fn after(&self, epoch_count: u64) -> Option<Self> {
self.0.checked_add(epoch_count).map(Self)
}
pub fn previous(&self) -> Option<Self> {
self.0.checked_sub(1).map(Self)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Sbor)]
#[sbor(transparent)]
pub struct Round(u64);
impl Round {
pub fn zero() -> Self {
Self::of(0)
}
pub fn of(number: u64) -> Self {
Self(number)
}
pub fn number(&self) -> u64 {
self.0
}
pub fn calculate_progress(from: Round, to: Round) -> Option<u64> {
let difference = (to.0 as i128) - (from.0 as i128);
if difference <= 0 {
None
} else {
Some(difference as u64) }
}
}