ember-protocol 0.4.9

RESP3 wire protocol parser and serializer for ember
Documentation

ember-protocol

RESP3 wire protocol implementation for ember. handles zero-copy parsing, direct-to-buffer serialization, and typed command dispatch.

what's in here

  • parse — zero-copy RESP3 frame parser that works directly on byte slices, returning (Frame, bytes_consumed) for pipelining support
  • serialize — writes frames directly into BytesMut with no intermediate allocations
  • command — converts raw frames into typed Command enums with argument validation, arity checks, and flag parsing
  • typesFrame enum: Simple, Error, Integer, Bulk, Null, Array, Map

quick start

use bytes::{Bytes, BytesMut};
use ember_protocol::{Frame, parse_frame, Command};

// parse a RESP3 frame from raw bytes
let input = b"+OK\r\n";
let (frame, consumed) = parse_frame(input).unwrap().unwrap();
assert_eq!(frame, Frame::Simple("OK".into()));

// serialize a frame back to bytes
let mut buf = BytesMut::new();
frame.serialize(&mut buf);
assert_eq!(&buf[..], b"+OK\r\n");

// parse a command from an array frame
let frame = Frame::Array(vec![
    Frame::Bulk(Bytes::from("SET")),
    Frame::Bulk(Bytes::from("key")),
    Frame::Bulk(Bytes::from("value")),
]);
let cmd = Command::from_frame(frame).unwrap();

supported commands

strings: GET, SET (with NX/XX/EX/PX), INCR, DECR, INCRBY, DECRBY, INCRBYFLOAT, APPEND, STRLEN, MGET, MSET, COPY

lists: LPUSH, RPUSH, LPOP, RPOP, LRANGE, LLEN, BLPOP, BRPOP

sorted sets: ZADD (with NX/XX/GT/LT/CH flags), ZREM, ZSCORE, ZRANK, ZRANGE (with WITHSCORES), ZCARD, ZSCAN

hashes: HSET, HGET, HGETALL, HDEL, HEXISTS, HLEN, HINCRBY, HKEYS, HVALS, HMGET, HSCAN

sets: SADD, SREM, SMEMBERS, SISMEMBER, SCARD, SSCAN

keys: DEL, UNLINK, EXISTS, EXPIRE, PEXPIRE, TTL, PTTL, PERSIST, TYPE, RENAME, SCAN, KEYS, OBJECT ENCODING, OBJECT REFCOUNT

server: PING, ECHO, DBSIZE, INFO, BGSAVE, BGREWRITEAOF, FLUSHDB, AUTH, QUIT, MONITOR, CONFIG GET, CONFIG SET, CONFIG REWRITE, SLOWLOG GET, SLOWLOG LEN, SLOWLOG RESET, CLIENT ID, CLIENT SETNAME, CLIENT GETNAME, CLIENT LIST, TIME, LASTSAVE, ROLE

transactions: MULTI, EXEC, DISCARD, WATCH, UNWATCH

pub/sub: SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB CHANNELS, PUBSUB NUMSUB, PUBSUB NUMPAT

acl: ACL WHOAMI, ACL LIST, ACL USERS, ACL GETUSER, ACL DELUSER, ACL SETUSER, ACL CAT

cluster: CLUSTER INFO, NODES, SLOTS, KEYSLOT, MYID, MEET, ADDSLOTS, ADDSLOTSRANGE, DELSLOTS, SETSLOT, FORGET, REPLICATE, FAILOVER, COUNTKEYSINSLOT, GETKEYSINSLOT, MIGRATE, RESTORE, ASKING

related crates

crate what it does
emberkv-core storage engine, keyspace, sharding
ember-persistence AOF, snapshots, and crash recovery
ember-server TCP server and connection handling
ember-cluster distributed coordination
ember-cli interactive CLI client (REPL, cluster subcommands, benchmark)