From 3458d3fa69f1a9855ac46a31ff7477537d93b093 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 17 Sep 2020 11:21:05 +0200 Subject: [PATCH] api-macro: replace ident hashmap with simple find after benchmarking (again), i found that doing a simple find instead of saving the inidices for the ident strings in a hashmap has no real performance impact (the max list size for the properties are max ~25 at the moment, so this should not be impacting compile times much) but it is much simpler Signed-off-by: Dominik Csapak --- proxmox-api-macro/src/api/mod.rs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/proxmox-api-macro/src/api/mod.rs b/proxmox-api-macro/src/api/mod.rs index 0071e81f..1c2d0f71 100644 --- a/proxmox-api-macro/src/api/mod.rs +++ b/proxmox-api-macro/src/api/mod.rs @@ -8,7 +8,6 @@ //! The handling of methods vs type definitions happens in their corresponding submodules. use std::convert::{TryFrom, TryInto}; -use std::collections::HashMap; use anyhow::Error; @@ -379,14 +378,12 @@ impl SchemaItem { /// Contains a sorted list of properties: pub struct SchemaObject { properties_: Vec<(FieldName, bool, Schema)>, - ident_hash: HashMap, } impl SchemaObject { pub fn new() -> Self { Self { properties_: Vec::new(), - ident_hash: HashMap::new(), } } @@ -397,9 +394,6 @@ impl SchemaObject { fn sort_properties(&mut self) { self.properties_.sort_by(|a, b| (a.0).cmp(&b.0)); - for (idx, prop) in self.properties_.iter().enumerate() { - self.ident_hash.insert(prop.0.as_ident_str().to_string(), idx); - } } fn try_extract_from(obj: &mut JSONObject) -> Result { @@ -428,7 +422,6 @@ impl SchemaObject { Ok(properties) }, )?, - ident_hash: HashMap::new(), }; this.sort_properties(); Ok(this) @@ -446,17 +439,11 @@ impl SchemaObject { } fn find_property_by_ident(&self, key: &str) -> Option<&(FieldName, bool, Schema)> { - match self.ident_hash.get(key) { - Some(idx) => Some(&self.properties_[*idx]), - None => None, - } + self.properties_.iter().find(|p| p.0.as_ident_str() == key) } fn find_property_by_ident_mut(&mut self, key: &str) -> Option<&mut (FieldName, bool, Schema)> { - match self.ident_hash.get(key) { - Some(idx) => Some(&mut self.properties_[*idx]), - None => None, - } + self.properties_.iter_mut().find(|p| p.0.as_ident_str() == key) } fn extend_properties(&mut self, new_fields: Vec<(FieldName, bool, Schema)>) {