cal-redis 0.1.80

Callable Redis Implementation
Documentation
// File: cal-redis/src/proxy.rs

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};

/// Retrieves all proxies stored in Redis.
pub async fn get_proxies(con: MultiplexedConnection) -> Result<Vec<Proxy>, RedisError> {
    get_items(con, PROXIES_KEY).await
}

/// Retrieves a proxy by its identifier (could be an ID, IP, etc.).
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),
    }
}

/// Inserts a proxy into Redis.
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(())
}

/// Inserts multiple proxies into Redis.
pub async fn insert_proxies(
    con: MultiplexedConnection,
    proxies: Vec<Proxy>,
) -> Result<(), RedisError> {
    for proxy in proxies {
        insert_proxy(con.clone(), proxy).await?;
    }
    Ok(())
}