diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index d4b0020..0a85635 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -247,9 +247,12 @@ impl IntoContextElement for Vec { renderer: &DustRenderer, breadcrumbs: &Vec<&dyn IntoContextElement>, ) -> &dyn ContextElement { - // renderer.render_partial_name(self, - // TODO - &OwnedLiteral::LPositiveInteger(1) + OwnedLiteral::LString( + renderer + .render_partial_name(self, breadcrumbs) + .expect("TODO: Make into_context_element return a RenderError"), + ) + // &OwnedLiteral::LPositiveInteger(1) } } diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 9600c81..adc8dec 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -116,21 +116,27 @@ impl<'a> DustRenderer<'a> { Ok(output) } - /// For rendering a dynamic partial's name - fn render_partial_name( + /// For rendering a dynamic partial's name or an rvalue template + pub fn render_partial_name( &'a self, body: &'a Vec, breadcrumbs: &Vec<&'a dyn IntoContextElement>, - blocks: &'a BlockContext<'a>, ) -> Result { let converted_to_template_elements: Vec> = body.into_iter().map(|e| e.into()).collect(); + // Simple templates like partial names and reference rvalues + // cannot contain blocks or inline partials, so we use a blank + // BlockContext. + let empty_block_context = BlockContext { + breadcrumbs: &Vec::new(), + blocks: &InlinePartialTreeElement::new(None, HashMap::new()), + }; self.render_body( &Body { elements: converted_to_template_elements, }, breadcrumbs, - blocks, + &empty_block_context, ) } @@ -311,7 +317,7 @@ impl<'a> DustRenderer<'a> { }; } DustTag::DTPartial(partial) => { - let partial_name = self.render_partial_name(&partial.name, breadcrumbs, blocks)?; + let partial_name = self.render_partial_name(&partial.name, breadcrumbs)?; if partial.params.is_empty() { let new_breadcrumbs = self.new_breadcrumbs_partial( breadcrumbs,