use redis::RedisResult;
pub trait RedisModel {
fn _prefix_key() -> &'static str;
fn _get_pk(&self) -> &str;
fn _set_pk(&mut self, pk: String);
fn _ensure_pk(&mut self) {
if self._get_pk() == "" {
self._set_pk(rusty_ulid::generate_ulid_string())
}
}
fn _fmt_pk(pk: &str) -> String {
format!("{}:{}", Self::_prefix_key(), pk)
}
fn _is_pk_fmt(pk: &str) -> bool {
pk.starts_with(Self::_prefix_key())
}
fn _get_redis_key(&self) -> String {
Self::_fmt_pk(self._get_pk())
}
fn _expire_cmd(&self, secs: usize) -> RedisResult<redis::Cmd> {
let key = self._get_redis_key();
let mut cmd = redis::cmd("EXPIRE");
cmd.arg(key).arg(secs);
Ok(cmd)
}
}