#![allow(dead_code)]
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use super::{Dot, NodeId};
use crate::resources::ChangeLog;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TempoMessageType {
MCollect,
MCollectAck,
MCommit,
ClockBump,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TempoMessage {
pub msg_type: TempoMessageType,
#[serde(skip_serializing_if = "Option::is_none")]
pub dot: Option<Dot>,
#[serde(skip_serializing_if = "Option::is_none")]
pub clock: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub changelog: Option<ChangeLog>,
#[serde(skip_serializing_if = "Option::is_none")]
pub votes: Option<HashMap<NodeId, u64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quorum: Option<Vec<NodeId>>,
}
impl TempoMessage {
pub fn mcollect(dot: Dot, clock: u64, changelog: ChangeLog) -> Self {
Self {
msg_type: TempoMessageType::MCollect,
dot: Some(dot),
clock: Some(clock),
changelog: Some(changelog),
votes: None,
quorum: None,
}
}
pub fn mcollect_ack(dot: Dot, clock: u64) -> Self {
Self {
msg_type: TempoMessageType::MCollectAck,
dot: Some(dot),
clock: Some(clock),
changelog: None,
votes: None,
quorum: None,
}
}
pub fn mcommit(dot: Dot, clock: u64, changelog: ChangeLog) -> Self {
Self {
msg_type: TempoMessageType::MCommit,
dot: Some(dot),
clock: Some(clock),
changelog: Some(changelog),
votes: None,
quorum: None,
}
}
pub fn clock_bump(clock: u64) -> Self {
Self {
msg_type: TempoMessageType::ClockBump,
dot: None,
clock: Some(clock),
changelog: None,
votes: None,
quorum: None,
}
}
}