jarust_interface 1.9.1

A janus client SDK in Rust
Documentation
use super::ringbuf_map::RingBufMap;
use std::sync::Arc;
use tokio::sync::RwLock;

#[derive(Clone, Debug)]
pub(crate) struct TransactionManager {
    inner: Arc<RwLock<RingBufMap<String, String>>>,
}

impl TransactionManager {
    #[tracing::instrument(level = tracing::Level::TRACE)]
    pub(crate) fn new(capacity: usize) -> Self {
        tracing::trace!("Creating new transaction manager");
        let transactions = RingBufMap::new(capacity);
        let inner = Arc::new(RwLock::new(transactions));
        Self { inner }
    }

    #[tracing::instrument(level = tracing::Level::TRACE, skip(self))]
    pub(crate) async fn get(&self, id: &str) -> Option<String> {
        tracing::trace!("Getting transaction");
        self.inner.read().await.get(&id.into()).cloned()
    }

    #[tracing::instrument(parent = None, skip(self))]
    pub(crate) async fn insert(&self, id: &str, transaction: &str) {
        tracing::trace!("Inserting transaction");
        self.inner.write().await.put(id.into(), transaction.into());
    }
}