kn-graph 0.7.4

A neural network inference graph intermediate representation, with surrounding utilities.
Documentation
use std::collections::HashMap;
use std::ops::Index;

#[derive(Debug)]
pub struct Store<'a, T> {
    inner: HashMap<&'a str, T>,
}

impl<'a, T> Store<'a, T> {
    pub fn contains(&self, key: &str) -> bool {
        self.inner.contains_key(&key)
    }

    pub fn define(&mut self, key: &'a str, value: T) {
        let prev = self.inner.insert(key, value);
        assert!(prev.is_none(), "Key {} already has a value", key);
    }

    pub fn get(&'a self, key: &str) -> Option<&'a T> {
        self.inner.get(key)
    }
}

impl<'a, T> Index<&str> for Store<'a, T> {
    type Output = T;

    fn index(&self, key: &str) -> &T {
        self.inner.get(key).unwrap_or_else(|| panic!("Key {} not found", key))
    }
}

impl<'a, T> Default for Store<'a, T> {
    fn default() -> Self {
        Store {
            inner: Default::default(),
        }
    }
}