use crate::process::Process;
use crate::time::Time;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Participant<P> {
pub process: P,
pub vote: Option<bool>,
pub decision_ack: bool,
}
impl<P> Participant<P> {
pub fn new(process: P) -> Participant<P> {
Participant {
process,
vote: None,
decision_ack: false,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum CoordinatorState<T>
where
T: Time,
{
Abort,
Commit,
Voting { vote_timeout_start: T },
WaitingForDecisionAck { ack_timeout_start: T },
WaitingForStart,
WaitingForVote,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CoordinatorContext<P, T>
where
P: Process,
T: Time,
{
pub(super) participants: Vec<Participant<P>>,
pub(super) state: CoordinatorState<T>,
}