pub struct OwnedRequest {
pub key: Vec<u8>,
pub extra: Vec<u8>,
pub body: Vec<u8>,
/* private fields */
}
Expand description
Clones Buffers
This behaves identical to Request other then the fact
that the internal body
/key
/extra
fields are owned
vectors NOT borrowed slices.
This makes life a lot easier when working with the borrow checker, and concurrent programming.
Fields§
§key: Vec<u8>
§extra: Vec<u8>
§body: Vec<u8>
Implementations§
Source§impl OwnedRequest
impl OwnedRequest
Sourcepub fn parse(x: &[u8]) -> ParseResult<Self>
pub fn parse(x: &[u8]) -> ParseResult<Self>
Reads a full packet and COPIES it’s buffers into its own. Allocation is lazy. Fields that are not used are not allocated. Fields are not allocated WHILE parsing, only when complete.
Sourcepub fn new(
opcode: OpCode,
vbucket: u16,
opaque: u32,
cas: u64,
extra: Vec<u8>,
key: Vec<u8>,
body: Vec<u8>,
) -> Self
pub fn new( opcode: OpCode, vbucket: u16, opaque: u32, cas: u64, extra: Vec<u8>, key: Vec<u8>, body: Vec<u8>, ) -> Self
This interface does ABSOLUTELY NO verfication of the packet it is expected if you are calling this method you understand the memcached protocol and you are going to use this to generate a valid packet.
The goal of this interface is to be fast. Encoding a packet with this interface + Encode trait involves very few branches
Memcached only allows Keys that are ASCII and non-white space this interface does not do ANY assertions of this. Please be aware.
Sourcepub fn rebuild(
&mut self,
opcode: OpCode,
vbucket: u16,
opaque: u32,
cas: u64,
extra: Vec<u8>,
key: Vec<u8>,
body: Vec<u8>,
)
pub fn rebuild( &mut self, opcode: OpCode, vbucket: u16, opaque: u32, cas: u64, extra: Vec<u8>, key: Vec<u8>, body: Vec<u8>, )
Over write an existing request
This is provided to allow for easier interfacing with SLAB’s. The semantics of this method are identical to the above. The primary difference is this doesn’t push ~100 bytes to the stack.
This interface does ABSOLUTELY NO verfication of the packet it is expected if you are calling this method you understand the memcached protocol and you are going to use this to generate a valid packet.
The goal of this interface is to be fast. Encoding a packet with this interface + Encode trait involves very few branches
Memcached only allows Keys that are ASCII and non-white space this interface does not do ANY assertions of this. Please be aware.
Sourcepub fn encode_self(&self) -> Encoder
pub fn encode_self(&self) -> Encoder
Allocates a new buffer and encodes this packets contents into it.
this method works out to a handful of memcp
primatives and is
fairly quick as their is no bounds checking (buffer length is
asserted on construction).
Sourcepub fn encode_into_buffer(&self, x: Vec<u8>) -> Encoder
pub fn encode_into_buffer(&self, x: Vec<u8>) -> Encoder
If you are using a slab to avoid making too many allocations
this method will check check the Vec<u8>
it is passed
only reserving additional capacity if necessary. If the Vec<u8>
has enough capacity no action is taken.
pub fn get_opcode(&self) -> OpCode
pub fn get_opaque(&self) -> u32
pub fn get_cas(&self) -> u64
pub fn get_vbucket_id(&self) -> u16
pub fn has_extra(&self) -> bool
pub fn get_extra<'a>(&'a self) -> Option<&'a [u8]>
pub fn has_key(&self) -> bool
pub fn get_key<'a>(&'a self) -> Option<&'a [u8]>
Sourcepub fn get_key_str<'a>(&'a self) -> Option<&'a str>
pub fn get_key_str<'a>(&'a self) -> Option<&'a str>
The standard states the key should be an ASCII compatible string so this method preforms that conversion without checking for correctness.
This isnt a problem as the key will be hash/stored as a byte buffer anyways.
This really only opens the door to non standard things.
pub fn has_body(&self) -> bool
pub fn get_body<'a>(&'a self) -> Option<&'a [u8]>
Trait Implementations§
Source§impl Clone for OwnedRequest
impl Clone for OwnedRequest
Source§fn clone(&self) -> OwnedRequest
fn clone(&self) -> OwnedRequest
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl PacketVal for OwnedRequest
impl PacketVal for OwnedRequest
Source§fn get_keylen(&self) -> usize
fn get_keylen(&self) -> usize
Get size of Packet’s Key Field
Source§fn get_bodylen(&self) -> usize
fn get_bodylen(&self) -> usize
Get size of Packet’s Body Field (Raw Data)
Source§fn get_extralen(&self) -> usize
fn get_extralen(&self) -> usize
Get size of Packet’s Extra Field (Flags, Arguments, Etc. command specific)