ligen-utils 0.1.18

Ligen (Language Interface Generator) is an extensible automatic binding generator ecosystem.
Documentation
use std::hash::Hash;
use bimap::BiMap;

pub struct LanguageMap<T>
where T: Eq + Hash
{
    left: String,
    right: String,
    map: BiMap<T, T>
}

impl<T> LanguageMap<T>
where T: Eq + Hash
{
    pub fn new(left: impl Into<String>, right: impl Into<String>) -> Self {
        let left = left.into();
        let right = right.into();
        let map = Default::default();
        Self { left, right, map }
    }

    pub fn insert(&mut self, left: impl Into<T>, right: impl Into<T>) {
        self.map.insert(left.into(), right.into());
    }

    pub fn get(&self, language: impl PartialEq<String>, value: &T) -> Option<&T> {
        if language == self.left {
            self.map.get_by_left(value)
        } else if language == self.right {
            self.map.get_by_right(value)
        } else {
            None
        }
    }
}