From f8020a01f9c23899d512b6bc546a535e5fbcf0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Tue, 2 Feb 2021 22:51:25 +0100 Subject: [PATCH] utils module --- src/cool.rs | 31 +++++++++++++++++++++++++++++++ src/main.rs | 4 ++-- src/yopa.rs | 33 ++------------------------------- 3 files changed, 35 insertions(+), 33 deletions(-) create mode 100644 src/cool.rs 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() - } -}