Redis Protocol

License License CircleCI Crates.io API docs

Structs and functions for implementing the Redis protocol.

Install

With cargo edit.

cargo add redis-protocol

Features

This library relies heavily on the BytesMut interface to implement parsing logic such that buffer contents never need to move or be copied.

Examples

```rust use redis_protocol::resp2::prelude::*; use bytes::BytesMut;

fn main() { let frame = Frame::BulkString("foobar".into()); let mut buf = BytesMut::new();

let len = match encode_bytes(&mut buf, &frame) { Ok(l) => l, Err(e) => panic!("Error encoding frame: {:?}", e) }; println!("Encoded {} bytes into buffer with contents {:?}", len, buf);

let buf: BytesMut = "*3\r\n$3\r\nFoo\r\n$-1\r\n$3\r\nBar\r\n".into(); let (frame, consumed) = match decode(&buf) { Ok(Some((f, c))) => (f, c), Ok(None) => panic!("Incomplete frame."), Err(e) => panic!("Error parsing bytes: {:?}", e) }; println!("Parsed frame {:?} and consumed {} bytes", frame, consumed);

let key = "foobarbaz"; println!("Hash slot for {}: {}", key, redis_keyslot(key)); } ```

Decode Logs

Use the decode-logs feature to enable special TRACE logs during the Frame decoding process.

IndexMap

Enable the index-map feature to use IndexMap instead of HashMap and HashSet. This is useful for testing and may also be useful to callers.