From 92c65a109b10ad67a3e5f0ac2aa2d8347c640246 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 14 Jun 2020 15:50:22 -0400 Subject: [PATCH] Implement the contextDump helper. --- src/renderer/renderer.rs | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index b31ae6f..561d224 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -765,8 +765,41 @@ impl<'a> DustRenderer<'a> { } } DustTag::DTHelperContextDump(parameterized_block) => { - //todo - todo!() + let param_map = + ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None); + let value = self.tap(breadcrumbs, ¶m_map, "key"); + let destination = self.tap(breadcrumbs, ¶m_map, "to"); + let value_rendered = match value.as_ref().map(|maybe_ice| { + maybe_ice + .as_ref() + .map(|ice| ice.get_context_element_reference()) + .map(|ce| ce.render(&Vec::new())) + }) { + Some(Ok(Ok(val))) => val, + _ => "current".to_owned(), + }; + let destination_rendered = match destination.as_ref().map(|maybe_ice| { + maybe_ice + .as_ref() + .map(|ice| ice.get_context_element_reference()) + .map(|ce| ce.render(&Vec::new())) + }) { + Some(Ok(Ok(val))) => val, + _ => "output".to_owned(), + }; + match ( + value_rendered.as_str(), + destination_rendered.as_str(), + breadcrumbs.last(), + ) { + ("current", "output", None) => return Ok("{}".to_owned()), + ("current", "console", None) => println!("{{}}"), + ("current", "output", Some(bc)) => return Ok(format!("{:?}", bc)), + ("current", "console", Some(bc)) => println!("{:?}", bc), + ("full", "output", _) => return Ok(format!("{:?}", breadcrumbs)), + ("full", "console", _) => println!("{:?}", breadcrumbs), + _ => panic!("Unhandled contextDump parameters."), + } } }