libvctrl 0.5.1

A robust, content-addressed version control engine for arbitrary data, designed for embedding into applications.
Documentation
use crate::domain::tree::{Tree, TreeEntry, TreeError};
use std::collections::BTreeMap;

#[derive(Debug, Clone, Default)]
pub struct Index {
    entries: BTreeMap<String, TreeEntry>,
}

impl Index {
    pub fn new() -> Self {
        Self {
            entries: BTreeMap::new(),
        }
    }

    pub fn add(&mut self, entry: TreeEntry) {
        self.entries.insert(entry.name.clone(), entry);
    }

    pub fn remove(&mut self, name: &str) -> Option<TreeEntry> {
        self.entries.remove(name)
    }

    pub fn get(&self, name: &str) -> Option<&TreeEntry> {
        self.entries.get(name)
    }

    pub fn iter(&self) -> impl Iterator<Item = &TreeEntry> {
        self.entries.values()
    }

    pub fn to_tree(&self) -> Result<Tree, TreeError> {
        let entries: Vec<_> = self.entries.values().cloned().collect();
        Tree::new(entries)
    }

    pub fn into_tree(self) -> Result<Tree, TreeError> {
        let entries: Vec<_> = self.entries.into_values().collect();
        Tree::new(entries)
    }

    pub fn clear(&mut self) {
        self.entries.clear();
    }
}