use crate::types::{Role, Stage};
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("vrf error: {0}")]
Vrf(String),
#[error("invalid stage transition: from {from:?} to {to:?}")]
InvalidStage { from: Stage, to: Stage },
#[error("insufficient votes: need {needed}, got {got}")]
InsufficientVotes { needed: u64, got: u64 },
#[error("missing block in round {0}")]
MissingBlock(u64),
#[error("node not in role {0:?}")]
WrongRole(Role),
#[error("no proposer elected for round {0}")]
NoProposer(u64),
#[error("not enough nodes: need {needed}, have {have}")]
NotEnoughNodes { needed: usize, have: usize },
}