authbox_redis/
ott_store.rs1use 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}