pub struct Decoder { /* private fields */ }
Expand description
A streaming RESP decoder.
Implementations§
Source§impl Decoder
impl Decoder
Sourcepub fn new() -> Decoder
pub 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);
Sourcepub fn with_buf_bulk() -> Decoder
pub 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);
Sourcepub fn feed(&mut self, buf: &[u8]) -> Result<(), Error>
pub 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);
Sourcepub fn read(&mut self) -> Option<Value>
pub fn read(&mut self) -> Option<Value>
Reads a decoded value, will return None
if no value decoded.
Sourcepub fn buffer_len(&self) -> usize
pub 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.
Sourcepub fn result_len(&self) -> usize
pub fn result_len(&self) -> usize
Returns decoded values count. The decoded values will be hold by decoder, until you read them.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Decoder
impl RefUnwindSafe for Decoder
impl Send for Decoder
impl Sync for Decoder
impl Unpin for Decoder
impl UnwindSafe for Decoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more