Skip to main content

authbox_redis/
ott_store.rs

1use async_trait::async_trait;
2use authbox_core::traits::OneTimeTokenStore;
3use redis::AsyncCommands;
4
5#[derive(Clone)]
6pub struct RedisOttStore {
7    pub client: redis::Client,
8}
9
10impl RedisOttStore {
11    pub fn new(client: redis::Client) -> Self {
12        Self { client }
13    }
14}
15
16#[async_trait]
17impl OneTimeTokenStore for RedisOttStore {
18    type Error = redis::RedisError;
19
20    async fn set(&self, key: &str, value: &str, ttl_seconds: u64) -> Result<(), Self::Error> {
21        let mut conn = self.client.get_multiplexed_async_connection().await?;
22
23        conn.set_ex::<_, _, ()>(key, value, ttl_seconds).await?;
24
25        Ok(())
26    }
27
28    async fn get(&self, key: &str) -> Result<Option<String>, Self::Error> {
29        let mut conn = self.client.get_multiplexed_async_connection().await?;
30
31        let value: Option<String> = conn.get(key).await?;
32
33        Ok(value)
34    }
35
36    async fn delete(&self, key: &str) -> Result<(), Self::Error> {
37        let mut conn = self.client.get_multiplexed_async_connection().await?;
38
39        conn.del::<_, ()>(key).await?;
40
41        Ok(())
42    }
43}