|
|
|||||||||||
fn handle_ping(_args: &[RespValue]) -> RespValue RespValue::SimpleString("PONG".to_string())
let original_buffer = self.buffer.clone(); let temp_buffer = &mut self.buffer[offset..].to_vec(); let mut temp_parser = RespParser buffer: BytesMut::from(temp_buffer.as_slice()), ; match temp_parser.parse_one()? Some(value) => let consumed = original_buffer.len() - temp_parser.buffer.len() - offset; Ok(Some((value, consumed))) None => Ok(None),
let server = Server::new(listener, store); server.run().await?; Giordani L. Rust Projects. Write a Redis Clone....
> SET mykey "Hello World" OK
impl Default for Store fn default() -> Self Self::new() fn handle_ping(_args: &[RespValue]) ->
> GET mykey "Hello World"
let value = match &args[1] RespValue::BulkString(Some(v)) => v.clone(), _ => return RespValue::Error("ERR invalid value".to_string()), ; let temp_buffer = &mut self.buffer[offset..].to_vec()
impl RespParser { pub fn new() -> Self Self buffer: BytesMut::new(),
fn handle_get(store: &Store, args: &[RespValue]) -> RespValue if args.len() != 1 return RespValue::Error("ERR wrong number of arguments for 'get' command".to_string());
impl Server { pub fn new(listener: TcpListener, store: Store) -> Self Self listener, store
fn parse_one(&mut self) -> Result<Option<RespValue>, String> { if self.buffer.is_empty() return Ok(None);