use core::cmp::Ordering;
use borsh::{BorshDeserialize, BorshSerialize};
#[derive(Debug, Clone, Copy, BorshDeserialize, BorshSerialize, PartialEq, Eq, PartialOrd, Ord)]
pub struct VoteTally {
accepted: usize,
rejected: usize,
}
impl VoteTally {
pub fn new() -> Self {
VoteTally {
accepted: 0,
rejected: 0,
}
}
pub fn accept(&mut self) -> &mut Self {
self.accepted += 1;
self
}
pub fn reject(&mut self) -> &mut Self {
self.rejected += 1;
self
}
pub fn compile(&self) -> (usize, usize) {
(self.accepted, self.rejected)
}
pub fn outcome(&self) -> VoteOutcome {
match self.accepted.cmp(&self.rejected) {
Ordering::Greater => VoteOutcome::Accepted,
Ordering::Less => VoteOutcome::Rejected,
Ordering::Equal => VoteOutcome::Equal,
}
}
}
impl Default for VoteTally {
fn default() -> Self {
VoteTally::new()
}
}
#[derive(Debug, Clone, Copy, BorshDeserialize, BorshSerialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum VoteOutcome {
Accepted,
Rejected,
Equal,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, BorshSerialize, BorshDeserialize)]
pub enum Vote {
Accept,
Reject,
}
impl Default for Vote {
fn default() -> Self {
Vote::Reject
}
}