1use redis::RedisResult;
2
3pub trait RedisModel {
5 fn _prefix_key() -> &'static str;
8
9 fn _get_pk(&self) -> &str;
11
12 fn _set_pk(&mut self, pk: String);
14
15 fn _ensure_pk(&mut self) {
17 if self._get_pk() == "" {
18 self._set_pk(rusty_ulid::generate_ulid_string())
19 }
20 }
21
22 fn _fmt_pk(pk: &str) -> String {
24 format!("{}:{}", Self::_prefix_key(), pk)
25 }
26
27 fn _is_pk_fmt(pk: &str) -> bool {
29 pk.starts_with(Self::_prefix_key())
30 }
31
32 fn _get_redis_key(&self) -> String {
34 Self::_fmt_pk(self._get_pk())
35 }
36
37 fn _expire_cmd(&self, secs: usize) -> RedisResult<redis::Cmd> {
39 let key = self._get_redis_key();
40 let mut cmd = redis::cmd("EXPIRE");
41
42 cmd.arg(key).arg(secs);
43
44 Ok(cmd)
45 }
46}