Struct redis_cli::Decoder
[−]
[src]
pub struct Decoder { /* fields omitted */ }
A streaming RESP decoder.
Methods
impl Decoder
[src]
fn new() -> Decoder
Creates a new decoder instance for decoding the RESP buffers.
Examples
let mut decoder = Decoder::new(); let value = Value::Bulk("Hello".to_string()); assert_eq!(decoder.feed(&value.encode()).unwrap(), ()); assert_eq!(decoder.read().unwrap(), value); assert_eq!(decoder.read(), None); let value = Value::BufBulk("Hello".to_string().into_bytes()); assert_eq!(decoder.feed(&value.encode()).unwrap(), ()); // Always decode "$" buffers to Value::Bulk even if feed Value::BufBulk buffers assert_eq!(decoder.read().unwrap(), Value::Bulk("Hello".to_string())); assert_eq!(decoder.read(), None);
fn with_buf_bulk() -> Decoder
Creates a new decoder instance for decoding the RESP buffers. The instance will decode bulk value to buffer bulk.
Examples
let mut decoder = Decoder::with_buf_bulk(); let value = Value::Bulk("Hello".to_string()); assert_eq!(decoder.feed(&value.encode()).unwrap(), ()); // Always decode "$" buffers to Value::BufBulk even if feed Value::Bulk buffers assert_eq!(decoder.read().unwrap(), Value::BufBulk("Hello".to_string().into_bytes())); assert_eq!(decoder.read(), None); let value = Value::BufBulk("Hello".to_string().into_bytes()); assert_eq!(decoder.feed(&value.encode()).unwrap(), ()); assert_eq!(decoder.read().unwrap(), value); assert_eq!(decoder.read(), None);
fn feed(&mut self, buf: &[u8]) -> Result<(), Error>
Feeds buffers to decoder. The buffer may contain one more values, or be a part of value. You can feed buffer at all times.
Examples
let mut decoder = Decoder::new(); assert_eq!(decoder.buffer_len(), 0); let value = Value::Bulk("Test".to_string()); let buf = value.encode(); assert_eq!(decoder.feed(&buf[0..4]).unwrap(), ()); assert_eq!(decoder.read(), None); assert_eq!(decoder.buffer_len(), 4); assert_eq!(decoder.result_len(), 0); assert_eq!(decoder.feed(&buf[4..]).unwrap(), ()); assert_eq!(decoder.buffer_len(), 0); assert_eq!(decoder.result_len(), 1); assert_eq!(decoder.read().unwrap(), value); assert_eq!(decoder.read(), None); assert_eq!(decoder.buffer_len(), 0); assert_eq!(decoder.result_len(), 0);
fn read(&mut self) -> Option<Value>
Reads a decoded value, will return None
if no value decoded.
fn buffer_len(&self) -> usize
Returns the buffer's length that wait for decoding. It usually is 0
. Non-zero means that
decoder need more buffer.
fn result_len(&self) -> usize
Returns decoded values count. The decoded values will be hold by decoder, until you read them.