rust-query 0.8.1

A query builder using rust concepts.
Documentation
use std::ops::Deref;

#[derive(Clone)]
pub struct MyMap<K, V> {
    inner: Vec<(K, V)>,
}

impl<K: PartialEq, V> MyMap<K, V> {
    pub fn pos_or_init(&mut self, k: K, f: impl FnOnce() -> V) -> usize {
        if let Some(res) = self.inner.iter().position(|x| x.0 == k) {
            return res;
        }
        let len = self.inner.len();
        self.inner.push((k, f()));
        len
    }

    pub fn get_or_init(&mut self, k: K, f: impl FnOnce() -> V) -> &V {
        let idx = self.pos_or_init(k, f);
        &self.inner[idx].1
    }

    pub fn into_iter(self) -> std::vec::IntoIter<(K, V)> {
        self.inner.into_iter()
    }
}

impl<K, V> Default for MyMap<K, V> {
    fn default() -> Self {
        Self {
            inner: Default::default(),
        }
    }
}

impl<K, V> Deref for MyMap<K, V> {
    type Target = Vec<(K, V)>;

    fn deref(&self) -> &Self::Target {
        &self.inner
    }
}