use std::collections::HashMap;
use std::sync::Arc;
#[cfg(feature = "events")]
use super::super::HoldEvent;
use super::super::{Entry, Meta};
use super::Store;
impl<T> Store<T>
where
T: Clone + Send + Sync,
{
pub fn get(&self, key: &str) -> Option<Arc<T>> {
let snapshot = self.inner.load();
snapshot.get(key).map(|entry| Arc::clone(&entry.value))
}
pub fn get_meta(&self, key: &str) -> Option<Meta> {
let snapshot = self.inner.load();
snapshot.get(key).map(|entry| entry.meta.clone())
}
pub fn get_entry(&self, key: &str) -> Option<Entry<T>> {
let snapshot = self.inner.load();
snapshot.get(key).cloned()
}
pub fn snapshot(&self) -> Arc<HashMap<String, Entry<T>>> {
self.inner.load_full()
}
pub fn keys(&self) -> Vec<String> {
let snapshot = self.inner.load();
snapshot.keys().cloned().collect()
}
pub fn len(&self) -> usize {
let snapshot = self.inner.load();
snapshot.len()
}
pub fn is_empty(&self) -> bool {
let snapshot = self.inner.load();
snapshot.is_empty()
}
#[cfg(feature = "events")]
pub fn subscribe(&self) -> tokio::sync::broadcast::Receiver<HoldEvent<T>> {
self.events.subscribe()
}
}