pub struct Request { /* private fields */ }
Expand description
Represents a parsed RESP request.
Note that we treat the 1st parameter as “command” and re-number all other parameters accordingly. Therefore “SET x y” will have “SET” as command, “x” as first parameter (index: 0) and “y” as second (index: 1).
Implementations§
source§impl Request
impl Request
sourcepub fn parse(data: &BytesMut) -> Result<Option<Request>>
pub fn parse(data: &BytesMut) -> Result<Option<Request>>
Tries to parse a RESP request from the given byte buffer.
If malformed data is detected, we return an Err. Otherwise we either return an
empty optional, in case only a partial request is present or otherwise a full request
which has then the form Ok(Some(Request))
.
§Examples
Parsing a simple request:
let mut bytes = BytesMut::from("*3\r\n$3\r\nSET\r\n$1\r\nx\r\n$1\r\ny\r\n");
let result = Request::parse(&mut bytes).unwrap().unwrap();
assert_eq!(result.command(), "SET");
assert_eq!(result.parameter_count(), 2);
assert_eq!(result.str_parameter(0).unwrap(), "x");
assert_eq!(result.str_parameter(1).unwrap(), "y");
assert_eq!(result.str_parameter(2).is_err(), true);
sourcepub fn example(data: Vec<&str>) -> Request
pub fn example(data: Vec<&str>) -> Request
Provides a helper function to create an example request in test environments.
§Example
let request = Request::example(vec!("PING"));
assert_eq!(request.command(), "PING");
sourcepub fn command(&self) -> &str
pub fn command(&self) -> &str
Returns the command in the request (this is the first parameter).
sourcepub fn parameter_count(&self) -> usize
pub fn parameter_count(&self) -> usize
Returns the number of parameters (not counting the command itself).
sourcepub fn parameter(&self, index: usize) -> Result<Bytes>
pub fn parameter(&self, index: usize) -> Result<Bytes>
Returns the n-th parameter (not including the command).
Returns an Err if the requested index is outside of the range of detected parameters.
sourcepub fn str_parameter(&self, index: usize) -> Result<&str>
pub fn str_parameter(&self, index: usize) -> Result<&str>
Returns the n-th parameter as UTF-8 string.
Returns an Err if either the requested index is out of range or if the parameter data isn’t a valid UTF-8 sequence.
sourcepub fn int_parameter(&self, index: usize) -> Result<i32>
pub fn int_parameter(&self, index: usize) -> Result<i32>
Returns the n-th parameter as integer.
Returns an Err if either the requested index is out of range or if the parameter data isn’t a valid integer number.
Auto Trait Implementations§
impl !Freeze for Request
impl RefUnwindSafe for Request
impl Send for Request
impl Sync for Request
impl Unpin for Request
impl UnwindSafe for Request
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
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more