use std::time::Duration;
use forklaunch_core::{common::FrameworkResult, config, persistence::json::JsonRecordCodec};
use forklaunch_infrastructure_redis::{RedisTtlCacheConfig, client::{RedisTtlCache, RedisQueue}, json::{JsonCache, JsonQueue}};
pub fn config() -> FrameworkResult<RedisTtlCacheConfig> {
let url: String = config::required("REDIS_URL")?;
let config = RedisTtlCacheConfig::new(url, Duration::from_secs(60 * 60));
config.validate()?;
Ok(config)
}
pub fn connect() -> FrameworkResult<RedisTtlCache> {
RedisTtlCache::connect(config()?)
}
pub fn encrypted_cache()
-> FrameworkResult<JsonCache<RedisTtlCache>> {
let codec = JsonRecordCodec::from_env()?;
Ok(JsonCache::new(connect()?, codec))
}
pub fn encrypted_queue(
name: &str,
) -> FrameworkResult<JsonQueue> {
let codec = JsonRecordCodec::from_env()?;
let queue = RedisQueue::connect(&config()?.url, name)?;
Ok(JsonQueue::new(queue, codec))
}