Struct disque_cli::Decoder [] [src]

pub struct Decoder { /* fields omitted */ }

A streaming RESP decoder.

Methods

impl Decoder
[src]

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);

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);

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);

Reads a decoded value, will return None if no value decoded.

Returns the buffer's length that wait for decoding. It usually is 0. Non-zero means that decoder need more buffer.

Returns decoded values count. The decoded values will be hold by decoder, until you read them.

Trait Implementations

impl Debug for Decoder
[src]