From 3d52283b74573af509deb3c47cbabf7b7b58b1dd Mon Sep 17 00:00:00 2001 From: max Date: Wed, 13 Dec 2023 15:34:54 +0200 Subject: Add automatic borrowing to let statement Signed-off-by: max --- askama_derive/src/generator.rs | 7 +++++++ testing/tests/simple.rs | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index 6004aff..df15bdc 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -916,7 +916,14 @@ impl<'a> Generator<'a> { }; let mut expr_buf = Buffer::new(0); + let borrow_val = !is_copyable(val); + if borrow_val { + expr_buf.write("&("); + } self.visit_expr(&mut expr_buf, val)?; + if borrow_val { + expr_buf.write(")"); + } let shadowed = self.is_shadowing_variable(&l.var)?; if shadowed { diff --git a/testing/tests/simple.rs b/testing/tests/simple.rs index f0f0a26..55353f5 100644 --- a/testing/tests/simple.rs +++ b/testing/tests/simple.rs @@ -484,3 +484,17 @@ fn test_num_literals() { "[90, -90, 90, 2, 56, 240, 10.5, 10.5, 100000000000, 105000000000]", ); } + +#[derive(askama::Template)] +#[template(source = "{% let word = s %}{{ word }}", ext = "html")] +struct LetBorrow { + s: String, +} + +#[test] +fn test_let_borrow() { + let template = LetBorrow { + s: "hello".to_owned(), + }; + assert_eq!(template.render().unwrap(), "hello") +} -- cgit