use crate::viewstamp::View;
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct ClientIdentifier(u128);
impl Default for ClientIdentifier {
fn default() -> Self {
Self(uuid::Uuid::new_v4().as_u128())
}
}
#[derive(
Copy, Clone, Debug, Default, Ord, PartialOrd, Eq, PartialEq, Hash, Serialize, Deserialize,
)]
pub struct RequestIdentifier(u128);
impl RequestIdentifier {
pub fn increment(&mut self) {
self.0 += 1;
}
pub fn next(&self) -> Self {
Self(self.0 + 1)
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct Request<R> {
pub payload: R,
pub client: ClientIdentifier,
pub id: RequestIdentifier,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct Reply<R> {
pub view: View,
pub id: RequestIdentifier,
pub payload: R,
}