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 { 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) } }