diff --git a/src/cool.rs b/src/cool.rs new file mode 100644 index 0000000..608bad9 --- /dev/null +++ b/src/cool.rs @@ -0,0 +1,31 @@ +use std::hash::Hash; +use std::collections::HashMap; + +pub fn map_drain_filter(map : &mut HashMap, filter : impl Fn(&K, &V) -> bool) -> Vec<(K, V)> { + let mut removed = vec![]; + let mut retain = vec![]; + for (k, v) in map.drain() { + if filter(&k, &v) { + removed.push((k, v)); + } else { + retain.push((k, v)); + } + } + map.extend(retain); + removed +} + +pub trait KVVecToKeysOrValues { + fn keys(self) -> Vec; + fn values(self) -> Vec; +} + +impl KVVecToKeysOrValues for Vec<(K,V)> { + fn keys(self) -> Vec { + self.into_iter().map(|(k, _v)| k).collect() + } + + fn values(self) -> Vec { + self.into_iter().map(|(_k, v)| v).collect() + } +} diff --git a/src/main.rs b/src/main.rs index f1bb308..f15eb64 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,8 @@ use log::LevelFilter; mod yopa; use yopa::model; use yopa::model::DataType; -use crate::yopa::model::TypedValue; -use anyhow::Error; + +mod cool; fn main() { simple_logging::log_to_stderr(LevelFilter::Debug); diff --git a/src/yopa.rs b/src/yopa.rs index 4d6f0a8..74029af 100644 --- a/src/yopa.rs +++ b/src/yopa.rs @@ -1,8 +1,8 @@ use std::collections::{HashMap}; -use std::iter::Extend; use crate::yopa::model::{ObjectTemplate, ID}; use thiserror::Error; -use std::hash::Hash; + +use crate::cool::{map_drain_filter, KVVecToKeysOrValues}; /// Data model structs and enums pub mod model { @@ -268,32 +268,3 @@ impl InMemoryStorage { } } } - -fn map_drain_filter(map : &mut HashMap, filter : impl Fn(&K, &V) -> bool) -> Vec<(K, V)> { - let mut removed = vec![]; - let mut retain = vec![]; - for (k, v) in map.drain() { - if filter(&k, &v) { - removed.push((k, v)); - } else { - retain.push((k, v)); - } - } - map.extend(retain); - removed -} - -trait KVVecToKeysOrValues { - fn keys(self) -> Vec; - fn values(self) -> Vec; -} - -impl KVVecToKeysOrValues for Vec<(K,V)> { - fn keys(self) -> Vec { - self.into_iter().map(|(k, _v)| k).collect() - } - - fn values(self) -> Vec { - self.into_iter().map(|(_k, v)| v).collect() - } -}