From 7833fcd35435c030c119b7d13791de66bd8c3776 Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Sun, 9 Feb 2020 13:30:19 +0100 Subject: [PATCH] [common][server] Get returns Option --- coffer-common/src/certificate.rs | 4 +++- coffer-server/src/coffer_map.rs | 28 ++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/coffer-common/src/certificate.rs b/coffer-common/src/certificate.rs index 69e975d..01df7b5 100644 --- a/coffer-common/src/certificate.rs +++ b/coffer-common/src/certificate.rs @@ -13,9 +13,11 @@ use std::{ path::Path, io::BufReader, fs::File, - ops::Deref }; +#[allow(unused_imports)] +use std::ops::Deref; // we use this but rustc doesn't know + use quick_error::quick_error; use seckey::SecKey; diff --git a/coffer-server/src/coffer_map.rs b/coffer-server/src/coffer_map.rs index 3941c71..6d2d261 100644 --- a/coffer-server/src/coffer_map.rs +++ b/coffer-server/src/coffer_map.rs @@ -29,7 +29,7 @@ impl CofferMap { } impl Coffer for CofferMap { - fn put(&mut self, key: CofferKey, value: CofferValue) -> CofferResult<()> { + fn put(&mut self, key: CofferKey, value: CofferValue) -> CofferResult<()> { let mut lock = self.write(); match lock.get_mut(&key.shard) { @@ -61,33 +61,29 @@ impl Coffer for CofferMap { } } - fn get(&self, key: &CofferKey) -> CofferResult { + fn get(&self, key: &CofferKey) -> Option { let lock = self.read(); - let res = lock.get(&key.shard) + lock.get(&key.shard) .and_then( |shard| { shard.get(&key.key) } ) - .ok_or(CofferError::Msg("Key not found"))?; - - Ok(res.clone()) + .map(|o| o.clone()) } - fn get_shard(&self, shard: T) -> CofferResult + fn get_shard(&self, shard: T) -> Option where T: AsRef { let lock = self.read(); debug!{"Coffer {:?}", *lock} - let coffer_shard = lock.get(shard.as_ref()) - .ok_or(CofferError::Msg("Shard not found"))?; + let map_to_vec = |map: &HashMap| { + map.iter() + .map(|(k,v)| (k.clone(), v.clone())) + .collect::>() + }; - let mut res = CofferShard(Vec::new()); - - for (k,v) in coffer_shard { - res.0.push((k.clone(), v.clone())); - } - - Ok(res) + lock.get(shard.as_ref()) + .and_then(|s| Some(CofferShard(map_to_vec(s)))) } }