taitan-orm-parser 0.1.10

Next Generation ORM based on sqlx
Documentation
use std::borrow::Cow;
use std::collections::hash_map::IntoValues;
use std::collections::HashMap;

pub trait Named {
    fn name<'a>(&'a self) -> Cow<'a, str>;
}



#[derive(Debug, Default, Clone)]
pub struct NamedMap<T: Named> {
    inputs: HashMap<String, T>,
}

impl <T: Named> NamedMap<T> {
    pub fn new() -> Self {
        Self {
            inputs: HashMap::new(),
        }
    }
    pub fn insert(&mut self, input: T) {
        if self.inputs.contains_key(input.name().as_ref()) {
            panic!("named input name already taken")
        }
        self.inputs.insert(input.name().to_string(), input);
    }

    pub fn get<N: AsRef<str>>(&self, name: N) -> Option<&T> {
        self.inputs.get(name.as_ref())
    }
}

pub struct NamedMapIterator<T: Named> {
    inner: IntoValues<String, T>,
}


impl <T: Named> Iterator for NamedMapIterator<T> {
    type Item = T;

    fn next(&mut self) -> Option<Self::Item> {
        self.inner.next()
    }
}

impl <T: Named>IntoIterator for NamedMap<T> {
    type Item = T;
    type IntoIter = NamedMapIterator<T>;

    fn into_iter(self) -> Self::IntoIter {
        NamedMapIterator {
            inner: self.inputs.into_values(),
        }
    }
}