Struct redis_protocol::resp3::types::StreamedFrame
source · pub struct StreamedFrame<T: Resp3Frame> {
pub kind: FrameKind,
/* private fields */
}Available on crate feature
resp3 only.Expand description
A helper struct for reading and managing streaming data types.
use redis_protocol::resp3::decode::streaming;
fn example() {
// decode the streamed array `[1,2]` one element at a time
let parts: Vec<Vec<u8>> = vec![
"*?\r\n".into(),
":1\r\n".into(),
":2\r\n".into(),
".\r\n".into(),
];
let (frame, _) = streaming::decode(&parts[0]).unwrap().unwrap();
assert!(frame.is_streaming());
let mut streaming = frame.into_streaming_frame().unwrap();
println!("Reading streaming {:?}", streaming.kind);
let (frame, _) = streaming::decode(&parts[1]).unwrap().unwrap();
assert!(frame.is_complete());
// add frames to the buffer until we reach the terminating byte sequence
streaming.add_frame(frame.into_complete_frame().unwrap());
let (frame, _) = streaming::decode(&parts[2]).unwrap().unwrap();
assert!(frame.is_complete());
streaming.add_frame(frame.into_complete_frame().unwrap());
let (frame, _) = streaming::decode(&parts[3]).unwrap().unwrap();
assert!(frame.is_complete());
streaming.add_frame(frame.into_complete_frame().unwrap());
assert!(streaming.is_finished());
// convert the buffer into one frame
let result = streaming.take().unwrap();
println!("{:?}", result); // OwnedFrame::Array { data: [1, 2], attributes: None }
}Fields§
§kind: FrameKindThe data type being streamed.
Implementations§
source§impl<T: Resp3Frame> StreamedFrame<T>
impl<T: Resp3Frame> StreamedFrame<T>
sourcepub fn new(kind: FrameKind) -> Self
pub fn new(kind: FrameKind) -> Self
Create a new StreamedFrame from the first section of data in a streaming response.
sourcepub fn add_attributes(
&mut self,
attributes: T::Attributes
) -> Result<(), RedisProtocolError>
pub fn add_attributes( &mut self, attributes: T::Attributes ) -> Result<(), RedisProtocolError>
Add the provided attributes to the frame buffer.
sourcepub fn take(&mut self) -> Result<T, RedisProtocolError>
pub fn take(&mut self) -> Result<T, RedisProtocolError>
Convert the internal buffer into one frame matching self.kind, clearing the internal buffer.
sourcepub fn is_finished(&self) -> bool
pub fn is_finished(&self) -> bool
Whether the last frame represents the terminating sequence at the end of a frame stream.
Trait Implementations§
source§impl<T: Debug + Resp3Frame> Debug for StreamedFrame<T>
impl<T: Debug + Resp3Frame> Debug for StreamedFrame<T>
source§impl<T: PartialEq + Resp3Frame> PartialEq for StreamedFrame<T>
impl<T: PartialEq + Resp3Frame> PartialEq for StreamedFrame<T>
source§fn eq(&self, other: &StreamedFrame<T>) -> bool
fn eq(&self, other: &StreamedFrame<T>) -> bool
This method tests for
self and other values to be equal, and is used
by ==.impl<T: Eq + Resp3Frame> Eq for StreamedFrame<T>
impl<T: Resp3Frame> StructuralPartialEq for StreamedFrame<T>
Auto Trait Implementations§
impl<T> Freeze for StreamedFrame<T>
impl<T> RefUnwindSafe for StreamedFrame<T>
impl<T> Send for StreamedFrame<T>
impl<T> Sync for StreamedFrame<T>
impl<T> Unpin for StreamedFrame<T>
impl<T> UnwindSafe for StreamedFrame<T>
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