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 {
pub fn new(
breadcrumbs: &Vec<&dyn ContextElement>,
params: &Vec<KVPair>,
) -> ParametersContext {
pub fn new(breadcrumbs: &Vec<&dyn ContextElement>, params: &Vec<KVPair>) -> ParametersContext {
let owned_params: HashMap<String, OwnedRValue> = params
.iter()
.map(|kvpair| (kvpair.key.to_string(), OwnedRValue::from(&kvpair.value)))
@ -104,10 +101,19 @@ impl Walkable for ParametersContext {
impl Clone for ParametersContext {
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 {
params: HashMap::new(),
breadcrumbs: Vec::new(),
params: new_params,
breadcrumbs: new_breadcrumbs,
}
}
}