use crate::Money;
use serde::{Deserialize, Serialize};
pub type Work = u64;
#[derive(Clone, Eq, Hash, PartialEq, PartialOrd, Debug, Ord, Serialize, Deserialize)]
pub struct RewardCounter {
pub reward: Money,
pub work: Work,
}
impl RewardCounter {
pub fn add(&self, reward: Money) -> Option<Self> {
let sum = match self.reward.checked_add(reward) {
Some(s) => s,
None => return None,
};
Some(Self {
work: self.work + 1,
reward: sum,
})
}
}
impl Default for RewardCounter {
fn default() -> Self {
Self {
work: 0,
reward: Money::zero(),
}
}
}