memcached_protocal/response/
retrieval_response.rs

1use std::io::Write;
2use ::error::Result;
3
4use super::response::Response;
5
6#[derive(Debug)]
7pub struct RetrievalResponseItem {
8    pub key: String,
9    pub flags: u16,
10    pub bytes: u32,
11    pub cas_unique: Option<u64>,
12    pub data_block: Vec<u8>,
13}
14
15
16impl Response for RetrievalResponseItem {
17    fn to_bytes(&self) -> Result<Vec<u8>> {
18        let mut buf = Vec::with_capacity(128);
19        try!(write!(&mut buf, "VALUE {} {} {} ", self.key, self.flags, self.bytes));
20
21        if self.cas_unique.is_some() {
22            try!(write!(&mut buf, "{} ", self.cas_unique.unwrap()));
23        }
24        buf.extend_from_slice(&self.data_block);
25        try!(buf.write(b"\r\n"));
26        return Ok(buf);
27    }
28}
29
30
31pub struct RetrievalResponse(pub Vec<RetrievalResponseItem>);
32
33
34impl Response for RetrievalResponse {
35    fn to_bytes(&self) -> Result<Vec<u8>> {
36        let mut buf = Vec::with_capacity(128);
37        for item in self.0.iter() {
38            buf.extend_from_slice(&try!(item.to_bytes()));
39        }
40        try!(buf.write(b"END\r\n"));
41        return Ok(buf);
42    }
43}