actix_storage/provider/
expirystore.rs1use std::sync::Arc;
2use std::time::Duration;
3
4use super::{Expiry, Store};
5use crate::error::Result;
6
7#[async_trait::async_trait]
11pub trait ExpiryStore: Store + Expiry + Send + Sync {
12 async fn set_expiring(
15 &self,
16 scope: Arc<[u8]>,
17 key: Arc<[u8]>,
18 value: Arc<[u8]>,
19 expire_in: Duration,
20 ) -> Result<()> {
21 self.set(scope.clone(), key.clone(), value).await?;
22 self.expire(scope, key, expire_in).await
23 }
24
25 async fn get_expiring(
28 &self,
29 scope: Arc<[u8]>,
30 key: Arc<[u8]>,
31 ) -> Result<Option<(Arc<[u8]>, Option<Duration>)>> {
32 let val = self.get(scope.clone(), key.clone()).await?;
33 match val {
34 Some(val) => {
35 let expiry = self.expiry(scope, key).await?;
36 Ok(Some((val, expiry)))
37 }
38 None => Ok(None),
39 }
40 }
41}