let key = match &args[0] RespValue::BulkString(Some(k)) => String::from_utf8_lossy(k).to_string(), _ => return RespValue::Error("ERR invalid key".to_string()), ;
fn handle_ttl(store: &Store, args: &[RespValue]) -> RespValue if args.len() != 1 return RespValue::Error("ERR wrong number of arguments for 'ttl' command".to_string());
pub fn del(&self, key: &str) -> bool self.inner.lock().unwrap().remove(key).is_some()
let server = Server::new(listener, store); server.run().await?; Giordani L. Rust Projects. Write a Redis Clone....
> EXISTS mykey (integer) 1
RespValue::Integer(store.ttl(&key))
fn parse_integer(&mut self) -> Result<Option<RespValue>, String> _ return RespValue::Error("ERR invalid key".to_string())
fn parse_one_from_offset(&mut self, offset: usize) -> Result<Option<(RespValue, usize)>, String> if offset >= self.buffer.len() return Ok(None);
Ok(()) } use bytes::Bytes, BytesMut; use std::collections::VecDeque; #[derive(Debug, PartialEq)] pub enum RespValue SimpleString(String), Error(String), Integer(i64), BulkString(Option<Vec<u8>>), Array(Vec<RespValue>),
use crate::resp::RespValue; use crate::store::Store; pub fn handle_command(store: &Store, cmd: &RespValue) -> RespValue { match cmd { RespValue::Array(args) if !args.is_empty() => { if let RespValue::BulkString(Some(cmd_bytes)) = &args[0] { let command = String::from_utf8_lossy(cmd_bytes).to_uppercase(); let args = &args[1..]; fn handle_ttl(store: &Store
match self.buffer[0] as char { '*' => self.parse_array(), '+' => self.parse_simple_string(), '-' => self.parse_error(), ':' => self.parse_integer(), '$' => self.parse_bulk_string(), _ => Err(format!("Invalid RESP type: {}", self.buffer[0] as char)), } }
println!("Giordani Redis Clone - Running on {}", addr); println!("Commands: SET, GET, DEL, EXISTS, KEYS, EXPIRE, TTL, DBSIZE, FLUSHALL");
use crate::commands::handle_command; use crate::resp::RespParser, RespValue; use crate::store::Store; use tokio::io::AsyncReadExt, AsyncWriteExt; use tokio::net::TcpListener, TcpStream; use std::sync::Arc; pub struct Server listener: TcpListener, store: Store,
© 2025 Скачать игры на планшет, смартфон, телефон
Правообладателям и DMCA | Жалоба на файл | Пользовательское соглашение