askama
                                
                                 askama copied to clipboard
                                
                                    askama copied to clipboard
                            
                            
                            
                        Add support for reference operator (i.e. `{% let x = &y %}`)
Sometimes while working with deeply nested structures, it would be useful to create an alias to a field, like say {% let h = &parent.child.hash %}
At the moment the & unary operator is not supported.
Not supporting this has been a design goal from the start. If I remember correctly, your example should already work without &.
If I remember correctly, your example should already work without
&.
Unfortunately it doesn't (hash here is an owned HashMap, and all other structures are owned by self):
error[E0507]: cannot move out of `self.nested_1.nested_2.hash` which is behind a shared reference
   --> /home/build/sources/testing/tests/simple.rs:406:10
    |
406 | #[derive(askama::Template, Default)]
    |          ^^^^^^^^^^^^^^^^
    |          |
    |          move occurs because `self.nested_1.nested_2.hash` has type `std::collections::HashMap<&str, &str>`, which does not implement t
he `Copy` trait                                                                                                                                  |          help: consider borrowing here: `&askama::Template`
    |
    = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error
Hmm, okay. Perhaps we should eagerly take a reference in variable declarations (and then not do so when referencing variables later).
I don't know this issue is still being tracked, by I solved by using a filter.
    pub fn asref<'a, T>(s: &'a T) -> askama::Result<&'a T> {
        Ok(s)
    }
And on the template:
{% let doc = invoice.0|asref %}
It is also possible to use https://doc.rust-lang.org/std/borrow/trait.Borrow.html
At least for my usecase where I needed to compare dates:
{% if (Utc::now() + Duration::days(1)).borrow() > delete_at %}
    {{ delete_at.format("%H:%M:%S") }}
{% else %}
    {{ delete_at }}
{% endif %}