use serde::{Deserialize, Serialize};
use crate::filter::Narrow;
use crate::{field_access, impl_default, impl_display};
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct Request {
msg_ids: Vec<u64>,
narrow: Vec<Narrow>,
}
impl Request {
pub const fn new() -> Self {
Self {
msg_ids: Vec::new(),
narrow: Vec::new(),
}
}
}
field_access! {
Request {
msg_ids: cow { [u64] },
narrow: cow { [Narrow] },
}
}
impl_default!(Request);
impl_display!(Request);
#[cfg(test)]
mod tests {
use super::*;
use crate::filter::{Operand, Operator};
#[test]
fn test_request() {
let msg_ids = [1u64];
let narrow = [Narrow::new()
.with_operator(Operator::Has)
.with_operand(Operand::text("link"))];
let request = Request::new()
.with_msg_ids(msg_ids.as_ref())
.with_narrow(narrow.as_ref());
let request_json = request.to_string();
assert_eq!(request.msg_ids(), msg_ids.as_ref());
assert_eq!(request.narrow(), narrow.as_ref());
assert_eq!(serde_json::to_string(&request).unwrap(), request_json);
assert_eq!(
serde_json::from_str::<Request>(&request_json).unwrap(),
request
);
}
}