fn decode()

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)
    }