Skip to main content

tokio_memcache/protocol/
extras.rs

1#![allow(dead_code)]
2
3use std::io;
4
5use byteorder::{NetworkEndian, WriteBytesExt};
6
7use super::{Extras, IntoValue};
8
9/// Extras for `get`/`getq`/`getk`/`getkq` commands.
10#[derive(Default)]
11pub struct GetExtras {
12    pub flags: u32,
13}
14
15impl IntoValue for GetExtras {
16    fn write<T: io::Write>(&self, buf: &mut T) -> io::Result<()> {
17        buf.write_u32::<NetworkEndian>(self.flags)
18    }
19}
20impl Extras for GetExtras {}
21
22pub type GetQExtras = GetExtras;
23pub type GetKExtras = GetExtras;
24pub type GetKQExtras = GetExtras;
25
26/// Extras for `set`/`add`/`replace` commands
27#[derive(Default)]
28pub struct SetExtras {
29    pub flags: u32,
30    pub expiration: u32,
31}
32
33impl IntoValue for SetExtras {
34    fn write<T: io::Write>(&self, buf: &mut T) -> io::Result<()> {
35        buf.write_u32::<NetworkEndian>(self.flags)?;
36        buf.write_u32::<NetworkEndian>(self.expiration)
37    }
38}
39impl Extras for SetExtras {}
40
41pub type AddExtras = SetExtras;
42pub type ReplaceExtras = SetExtras;
43
44/// Extras for `incr`/`decr` commands
45#[derive(Default)]
46pub struct IncrExtras {
47    pub amount: u64,
48    pub initial: u64,
49    pub expiration: u32,
50}
51
52impl IntoValue for IncrExtras {
53    fn write<T: io::Write>(&self, buf: &mut T) -> io::Result<()> {
54        buf.write_u64::<NetworkEndian>(self.amount)?;
55        buf.write_u64::<NetworkEndian>(self.initial)?;
56        buf.write_u32::<NetworkEndian>(self.expiration)
57    }
58}
59impl Extras for IncrExtras {}
60
61pub type DecrExtras = IncrExtras;