rrelayer_core 0.7.0

Core types and functionality for rrelayer - a powerful blockchain transaction relay service
Documentation
use std::sync::Arc;

use super::types::{Relayer, RelayerId};
use crate::shared::cache::{Cache, CacheValue};

const RELAYER_CACHE_KEY: &str = "relayer";

fn build_relayer_cache_key(id: &RelayerId) -> String {
    format!("{}__{}", RELAYER_CACHE_KEY, id)
}

pub async fn get_relayer_cache(cache: &Arc<Cache>, relayer_id: &RelayerId) -> Option<Relayer> {
    if let Some(cached_result) = cache.get(&build_relayer_cache_key(relayer_id).to_string()).await {
        return cached_result.to_relayer();
    }

    None
}

pub async fn set_relayer_cache(
    cache: &Arc<Cache>,
    relayer_id: &RelayerId,
    relayer: &Option<Relayer>,
) {
    cache
        .insert(
            build_relayer_cache_key(relayer_id).to_string(),
            CacheValue::Relayer(relayer.clone()),
        )
        .await;
}

pub async fn invalidate_relayer_cache(cache: &Arc<Cache>, relayer_id: &RelayerId) {
    cache.delete(&build_relayer_cache_key(relayer_id).to_string()).await;
}