use {parking_lot::RwLock, reovim_kernel::api::v1::Service};
use crate::LanguageInfo;
#[derive(Default)]
pub struct LanguageInfoStore {
entries: RwLock<Vec<LanguageInfo>>,
}
impl LanguageInfoStore {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn add(&self, info: LanguageInfo) {
self.entries.write().push(info);
}
pub fn take_all(&self) -> Vec<LanguageInfo> {
std::mem::take(&mut *self.entries.write())
}
#[must_use]
pub fn len(&self) -> usize {
self.entries.read().len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.entries.read().is_empty()
}
}
impl Service for LanguageInfoStore {}
impl std::fmt::Debug for LanguageInfoStore {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("LanguageInfoStore")
.field("count", &self.len())
.finish()
}
}
#[cfg(test)]
#[path = "lang_store_tests.rs"]
mod tests;