use crate::identifiers::{ClientIdentifier, RequestIdentifier};
use crate::mailbox::Address;
use crate::stamps::{OpNumber, View};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Message {
pub from: Address,
pub to: Address,
pub view: View,
pub payload: Payload,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Payload {
Request(Request),
Prepare(Prepare),
PrepareOk(PrepareOk),
Reply(Reply),
DoViewChange(DoViewChange),
StartView(StartView),
Ping,
OutdatedView,
OutdatedRequest(OutdatedRequest),
ConcurrentRequest(ConcurrentRequest),
}
impl From<Request> for Payload {
fn from(value: Request) -> Self {
Self::Request(value)
}
}
impl From<Prepare> for Payload {
fn from(value: Prepare) -> Self {
Self::Prepare(value)
}
}
impl From<PrepareOk> for Payload {
fn from(value: PrepareOk) -> Self {
Self::PrepareOk(value)
}
}
impl From<Reply> for Payload {
fn from(value: Reply) -> Self {
Self::Reply(value)
}
}
impl From<DoViewChange> for Payload {
fn from(value: DoViewChange) -> Self {
Self::DoViewChange(value)
}
}
impl From<StartView> for Payload {
fn from(value: StartView) -> Self {
Self::StartView(value)
}
}
impl From<ConcurrentRequest> for Payload {
fn from(value: ConcurrentRequest) -> Self {
Self::ConcurrentRequest(value)
}
}
impl From<OutdatedRequest> for Payload {
fn from(value: OutdatedRequest) -> Self {
Self::OutdatedRequest(value)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Request {
pub op: Vec<u8>,
pub c: ClientIdentifier,
pub s: RequestIdentifier,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Prepare {
pub n: OpNumber,
pub m: Request,
pub k: OpNumber,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct PrepareOk {
pub n: OpNumber,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Reply {
pub x: Vec<u8>,
pub s: RequestIdentifier,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct DoViewChange {
pub l: Vec<Request>,
pub k: OpNumber,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct StartView {
pub l: Vec<Request>,
pub k: OpNumber,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ConcurrentRequest {
pub s: RequestIdentifier,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OutdatedRequest {
pub s: RequestIdentifier,
}