use std::collections::HashMap;
use {reovim_driver_session::SessionExtension, reovim_kernel::api::v1::BufferId};
use crate::CodecMetadata;
#[derive(Default)]
pub struct CodecSessionState {
metadata: HashMap<usize, CodecMetadata>,
}
impl SessionExtension for CodecSessionState {
fn create() -> Self {
Self::default()
}
}
impl CodecSessionState {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, buffer_id: BufferId, metadata: CodecMetadata) {
self.metadata.insert(buffer_id.as_usize(), metadata);
}
#[must_use]
pub fn get(&self, buffer_id: BufferId) -> Option<&CodecMetadata> {
self.metadata.get(&buffer_id.as_usize())
}
pub fn remove(&mut self, buffer_id: BufferId) -> Option<CodecMetadata> {
self.metadata.remove(&buffer_id.as_usize())
}
#[must_use]
pub fn contains(&self, buffer_id: BufferId) -> bool {
self.metadata.contains_key(&buffer_id.as_usize())
}
#[must_use]
pub fn len(&self) -> usize {
self.metadata.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.metadata.is_empty()
}
pub fn clear(&mut self) {
self.metadata.clear();
}
}
impl std::fmt::Debug for CodecSessionState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("CodecSessionState")
.field("buffer_count", &self.metadata.len())
.finish()
}
}
#[cfg(test)]
#[path = "state_tests.rs"]
mod tests;