Giordani L. Rust Projects. Write A Redis Clone.... 90%

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,

  • Контакты
Giordani L. Rust Projects. Write a Redis Clone....

Правообладателям и DMCA | Жалоба на файл | Пользовательское соглашение