use serde::{Deserialize, Serialize};
use crate::{field_access, impl_default, impl_display, Flag, Operation};
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct Request {
messages: Vec<u64>,
op: Operation,
flag: Flag,
}
impl Request {
pub const fn new() -> Self {
Self {
messages: Vec::new(),
op: Operation::new(),
flag: Flag::new(),
}
}
}
field_access! {
Request {
messages: cow { [u64] },
}
}
field_access! {
Request {
op: Operation,
flag: Flag,
}
}
impl_default!(Request);
impl_display!(Request);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_request() {
let messages = [1u64];
let op = Operation::new();
let flag = Flag::new();
let request = Request::new()
.with_messages(messages.as_ref())
.with_op(op)
.with_flag(flag);
let request_json = request.to_string();
assert_eq!(serde_json::to_string(&request).unwrap(), request_json);
assert_eq!(
serde_json::from_str::<Request>(&request_json).unwrap(),
request
);
assert_eq!(request.messages(), messages.as_ref());
assert_eq!(request.op(), op);
assert_eq!(request.flag(), flag);
}
}