in src/codec/memcache.rs [78:113]
fn decode(&self, buffer: &mut Session) -> Result<(), ParseError> {
// no-copy borrow as a slice
let buf: &[u8] = (*buffer).buffer();
for response in &[
"STORED\r\n",
"NOT_STORED\r\n",
"EXISTS\r\n",
"NOT_FOUND\r\n",
"DELETED\r\n",
"TOUCHED\r\n",
] {
let bytes = response.as_bytes();
if buf.len() >= bytes.len() && &buf[0..bytes.len()] == bytes {
let _ = buffer.consume(bytes.len());
return Ok(());
}
}
let mut windows = buf.windows(5);
if let Some(response_end) = windows.position(|w| w == b"END\r\n") {
let response = &buf[0..(response_end + 5)];
let mut start = 0;
let mut lines = response.windows(2);
while let Some(line_end) = lines.position(|w| w == b"\r\n") {
if response.len() >= 5 && &response[start..(start + 5)] == b"VALUE" {
metrics::RESPONSE_HIT.increment();
}
start = line_end + 2;
}
buffer.consume(response_end + 5);
return Ok(());
}
Err(ParseError::Incomplete)
}