Implement a real clone for ParametersContext.

This commit is contained in:
Tom Alexander 2020-05-10 22:35:17 -04:00
parent 46bb5558ac
commit 68639481f5
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -54,10 +54,7 @@ pub struct ParametersContext {
} }
impl ParametersContext { impl ParametersContext {
pub fn new( pub fn new(breadcrumbs: &Vec<&dyn ContextElement>, params: &Vec<KVPair>) -> ParametersContext {
breadcrumbs: &Vec<&dyn ContextElement>,
params: &Vec<KVPair>,
) -> ParametersContext {
let owned_params: HashMap<String, OwnedRValue> = params let owned_params: HashMap<String, OwnedRValue> = params
.iter() .iter()
.map(|kvpair| (kvpair.key.to_string(), OwnedRValue::from(&kvpair.value))) .map(|kvpair| (kvpair.key.to_string(), OwnedRValue::from(&kvpair.value)))
@ -104,10 +101,19 @@ impl Walkable for ParametersContext {
impl Clone for ParametersContext { impl Clone for ParametersContext {
fn clone(&self) -> Self { fn clone(&self) -> Self {
// TODO: Implement clone let new_params: HashMap<String, OwnedRValue> = self
.params
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect();
let new_breadcrumbs: Vec<Box<dyn ContextElement>> = self
.breadcrumbs
.iter()
.map(|bread| bread.clone_to_box())
.collect();
ParametersContext { ParametersContext {
params: HashMap::new(), params: new_params,
breadcrumbs: Vec::new(), breadcrumbs: new_breadcrumbs,
} }
} }
} }