Files
archive/src/commands/delete.rs

48 lines
1.0 KiB
Rust

use std::io::Cursor;
use bytes::BytesMut;
use crate::{
Result,
buffer::{ArchiveBuf as _, ArchiveBufMut},
connection::Connection,
database::Database,
};
#[derive(Debug, Clone)]
pub struct Delete {
key: String,
}
impl Delete {
pub fn new(key: String) -> Self {
Self { key }
}
pub async fn execute(self, db: &Database, connection: &mut Connection) -> Result<()> {
let value = db.delete(&self.key).await;
let mut buf = BytesMut::new();
buf.put_option(value, ArchiveBufMut::put_bytes_with_length);
connection.write(buf.into()).await?;
Ok(())
}
pub fn parse(buf: &mut Cursor<&[u8]>) -> Result<Self> {
let key = buf.try_get_short_string()?;
Ok(Self { key })
}
pub fn put(&self, buf: &mut BytesMut) -> Result<()> {
buf.put_short_string("delete")?;
self.put_without_cmd_name(buf)
}
pub fn put_without_cmd_name(&self, buf: &mut BytesMut) -> Result<()> {
buf.put_short_string(&self.key)
}
}