use crate::commands::{from_op, TuringOp};
use anyhow::Result;
use serde::Serialize;
#[derive(Debug, Serialize, Clone, Default)]
pub struct DocumentQuery {
db: String,
document: Option<String>,
}
impl DocumentQuery {
pub fn new() -> Self {
Self {
db: Default::default(),
document: Default::default(),
}
}
pub fn db(&mut self, name: &str) -> &Self {
self.db = name.into();
self
}
pub fn document(&mut self, name: &str) -> &Self {
self.document = Some(name.into());
self
}
pub fn create(&self) -> Result<Vec<u8>> {
let mut packet = from_op(&TuringOp::DocumentCreate).to_vec();
packet.extend_from_slice(self.db.as_bytes());
let data = bincode::serialize::<Self>(self)?;
packet.extend_from_slice(&data);
Ok(packet)
}
pub fn list(&self) -> Result<Vec<u8>> {
let mut packet = from_op(&TuringOp::DocumentList).to_vec();
packet.extend_from_slice(self.db.as_bytes());
let data = bincode::serialize::<Self>(self)?;
packet.extend_from_slice(&data);
Ok(packet)
}
pub fn drop(&self) -> Result<Vec<u8>> {
let mut packet = from_op(&TuringOp::DocumentDrop).to_vec();
packet.extend_from_slice(self.db.as_bytes());
let data = bincode::serialize::<Self>(self)?;
packet.extend_from_slice(&data);
Ok(packet)
}
}