redis_module_ext/
prelude.rs

1use redis_module::RedisResult;
2use redis_module::logging::RedisLogLevel;
3
4use crate::RedisDataType;
5
6pub trait RedisKeyWritableExt {
7    /// Get a custom [RedisDataType] from a key.
8    #[allow(clippy::mut_from_ref)]
9    fn get<T: RedisDataType>(&self) -> RedisResult<Option<&mut T>>;
10    /// Set a key to a custom [RedisDataType].
11    fn set<T: RedisDataType>(&self, value: T) -> RedisResult<()>;
12}
13
14impl RedisKeyWritableExt for redis_module::key::RedisKeyWritable {
15    fn get<T: RedisDataType>(&self) -> RedisResult<Option<&mut T>> {
16        let Some(ty) = T::redis_ty(std::ptr::null_mut()) else {
17            return Err(redis_module::RedisError::Str("type has not been registered"));
18        };
19
20        self.get_value(&ty)
21    }
22
23    fn set<T: RedisDataType>(&self, value: T) -> RedisResult<()> {
24        let Some(ty) = T::redis_ty(std::ptr::null_mut()) else {
25            return Err(redis_module::RedisError::Str("type has not been registered"));
26        };
27
28        self.set_value(&ty, value)
29    }
30}
31
32pub trait IoLoggingExt {
33    fn log(&mut self, level: redis_module::logging::RedisLogLevel, message: impl AsRef<str>);
34
35    fn log_warning(&mut self, message: impl AsRef<str>) {
36        self.log(RedisLogLevel::Warning, message);
37    }
38
39    fn log_debug(&mut self, message: impl AsRef<str>) {
40        self.log(RedisLogLevel::Debug, message);
41    }
42
43    fn log_notice(&mut self, message: impl AsRef<str>) {
44        self.log(RedisLogLevel::Notice, message);
45    }
46
47    fn log_verbose(&mut self, message: impl AsRef<str>) {
48        self.log(RedisLogLevel::Verbose, message);
49    }
50}