use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct RequestId(u64);
impl RequestId {
#[must_use]
pub fn new(id: u64) -> Self {
Self(id)
}
#[must_use]
pub fn value(self) -> u64 {
self.0
}
}
impl std::fmt::Display for RequestId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RequestId({})", self.0)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Envelope {
Request {
id: RequestId,
payload: String,
},
Response {
id: RequestId,
payload: String,
},
Error {
id: RequestId,
message: String,
},
}
impl Envelope {
#[must_use]
pub fn id(&self) -> RequestId {
match self {
Self::Request { id, .. }
| Self::Response { id, .. }
| Self::Error { id, .. } => *id,
}
}
}