use libvctrl_handler::{Hash, MAX_NAME_LENGTH, RefStore, VctrlError};
use std::collections::HashMap;
#[derive(Debug, Default)]
pub struct MemoryRefStore {
refs: HashMap<String, Hash>,
}
impl MemoryRefStore {
#[must_use]
pub fn new() -> Self {
Self {
refs: HashMap::new(),
}
}
}
impl RefStore for MemoryRefStore {
fn set_ref(&mut self, name: &str, hash: &Hash) -> Result<(), VctrlError> {
if name.is_empty() || name.len() > MAX_NAME_LENGTH {
return Err(VctrlError::InvalidName(name.into()));
}
let _ = self.refs.insert(name.to_string(), *hash);
Ok(())
}
fn get_ref(&self, name: &str) -> Result<Hash, VctrlError> {
self.refs
.get(name)
.copied()
.ok_or_else(|| VctrlError::RefNotFound(name.into()))
}
fn delete_ref(&mut self, name: &str) -> Result<(), VctrlError> {
let _ = self.refs.remove(name);
Ok(())
}
fn list_refs(&self) -> Result<Vec<String>, VctrlError> {
Ok(self.refs.keys().cloned().collect())
}
}