fn decode()

in src/replay.rs [661:692]


fn decode(buffer: &mut Session) -> Result<(), ParseError> {
    // no-copy borrow as a slice
    let buf: &[u8] = (*buffer).buffer();

    debug!("buffer content: {:?}", buf);

    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") {
        if response_end > 0 {
            RESPONSE_HIT.increment();
        }
        let _ = buffer.consume(response_end + 5);
        return Ok(());
    }

    Err(ParseError::Incomplete)
}