redis_om/
redis_model.rs

1use redis::RedisResult;
2
3/// Shared Redis Object Model
4pub trait RedisModel {
5    /// Get Redis key to be used in storing HashModel object.
6    /// This should by default that HashModel name in lowercase.
7    fn _prefix_key() -> &'static str;
8
9    /// Get primary key
10    fn _get_pk(&self) -> &str;
11
12    /// Get primary key
13    fn _set_pk(&mut self, pk: String);
14
15    /// Ensure primary key
16    fn _ensure_pk(&mut self) {
17        if self._get_pk() == "" {
18            self._set_pk(rusty_ulid::generate_ulid_string())
19        }
20    }
21
22    /// Get key "{self::redis_key}:{pk}"
23    fn _fmt_pk(pk: &str) -> String {
24        format!("{}:{}", Self::_prefix_key(), pk)
25    }
26
27    /// Check if str is  of format "{self::redis_key}:{pk}"
28    fn _is_pk_fmt(pk: &str) -> bool {
29        pk.starts_with(Self::_prefix_key())
30    }
31
32    /// Get key "{self::redis_key}:{self._get_primary_key()}"
33    fn _get_redis_key(&self) -> String {
34        Self::_fmt_pk(self._get_pk())
35    }
36
37    /// Expire Self at given duration
38    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}