1use crate::key::Key;
2use crate::policy::Policy;
3use redis::Cmd as RedisCmd;
4
5pub struct Cmd<'a> {
6 key: &'a Key<'a>,
7 policy: &'a Policy,
8}
9
10impl<'a> Cmd<'a> {
11 pub fn new(key: &'a Key<'a>, policy: &'a Policy) -> Self {
12 Cmd { key, policy }
13 }
14}
15
16impl From<&Cmd<'_>> for RedisCmd {
17 fn from(cmd: &Cmd<'_>) -> Self {
18 let mut redis_cmd = RedisCmd::new();
19 redis_cmd
20 .arg("CL.THROTTLE")
21 .arg(cmd.key)
22 .arg(cmd.policy.burst)
23 .arg(cmd.policy.tokens)
24 .arg(cmd.policy.period.as_secs())
25 .arg(cmd.policy.apply);
26 redis_cmd
27 }
28}
29
30impl From<Cmd<'_>> for RedisCmd {
31 fn from(cmd: Cmd<'_>) -> Self {
32 RedisCmd::from(&cmd)
33 }
34}