48 lines
1.0 KiB
Rust
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)
|
|
}
|
|
}
|