From 68639481f535566bfd125b6bb3a283d97f27e3b8 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 10 May 2020 22:35:17 -0400 Subject: [PATCH] Implement a real clone for ParametersContext. --- src/renderer/parameters_context.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 3649044..a9b52f5 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -54,10 +54,7 @@ pub struct ParametersContext { } impl ParametersContext { - pub fn new( - breadcrumbs: &Vec<&dyn ContextElement>, - params: &Vec, - ) -> ParametersContext { + pub fn new(breadcrumbs: &Vec<&dyn ContextElement>, params: &Vec) -> ParametersContext { let owned_params: HashMap = 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 = self + .params + .iter() + .map(|(k, v)| (k.clone(), v.clone())) + .collect(); + let new_breadcrumbs: Vec> = self + .breadcrumbs + .iter() + .map(|bread| bread.clone_to_box()) + .collect(); ParametersContext { - params: HashMap::new(), - breadcrumbs: Vec::new(), + params: new_params, + breadcrumbs: new_breadcrumbs, } } }