use certmagic::storage::{Locker, Storage};
use certmagic::{Config, RedisStorage, RedisStorageOptions};
use tokio_util::sync::CancellationToken;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let url = std::env::var("CERTMAGIC_REDIS_URL")?;
let storage = RedisStorage::connect(
&url,
RedisStorageOptions {
namespace: "certmagic-example".into(),
..Default::default()
},
)
.await?;
let guard = storage
.lock(&CancellationToken::new(), "example-operation")
.await?;
storage.store("example/value", b"hello").await?;
assert_eq!(storage.load("example/value").await?, b"hello");
storage.delete("example/value").await?;
guard.release_and_wait().await?;
let config = Config::builder().storage(storage).build()?;
config.cache().stop_and_wait().await;
println!("Redis storage configured and example operations completed");
Ok(())
}