use crate::cache::get_hash;
use crate::common::{deserialize_from_json, get_items, serialize_to_json};
use crate::constants::PROXIES_KEY;
use cal_core::Proxy;
use redis::aio::MultiplexedConnection;
use redis::{AsyncCommands, RedisError, Value};
pub async fn get_proxies(con: MultiplexedConnection) -> Result<Vec<Proxy>, RedisError> {
get_items(con, PROXIES_KEY).await
}
pub async fn get_proxy_by_id(
con: MultiplexedConnection,
key: &str,
) -> Result<Option<Proxy>, RedisError> {
match get_hash(con.clone(), PROXIES_KEY, key).await? {
Some(proxy_json) => {
let proxy = deserialize_from_json(&proxy_json)?;
Ok(Some(proxy))
}
None => Ok(None),
}
}
pub async fn insert_proxy(mut con: MultiplexedConnection, proxy: Proxy) -> Result<(), RedisError> {
let value = serialize_to_json(&proxy)?;
let _: Value = con.hset(PROXIES_KEY, &proxy.id, value).await?;
Ok(())
}
pub async fn insert_proxies(
con: MultiplexedConnection,
proxies: Vec<Proxy>,
) -> Result<(), RedisError> {
for proxy in proxies {
insert_proxy(con.clone(), proxy).await?;
}
Ok(())
}