memcached_protocal/response/
retrieval_response.rs1use 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}