diff --git a/askama_shared/src/parser.rs b/askama_shared/src/parser.rs index 261887b0..d2b2cd10 100644 --- a/askama_shared/src/parser.rs +++ b/askama_shared/src/parser.rs @@ -442,6 +442,7 @@ fn target(i: &[u8]) -> IResult<&[u8], Target<'_>> { // match structs let (i, path) = opt(path)(i)?; if let Some(path) = path { + let (i, _) = opt(ws(tag("with")))(i)?; let (i, is_unnamed_struct) = opt_opening_paren(i)?; if is_unnamed_struct { let (i, targets) = alt(( diff --git a/testing/tests/let_destructoring.rs b/testing/tests/let_destructoring.rs index 20f7fffa..5cb7ae40 100644 --- a/testing/tests/let_destructoring.rs +++ b/testing/tests/let_destructoring.rs @@ -105,3 +105,17 @@ fn test_let_destruct_with_path() { }; assert_eq!(t.render().unwrap(), "hello"); } + +#[derive(Template)] +#[template(source = "{% let some::path::Struct with (v) = v %}{{v}}", ext = "txt")] +struct LetDestructoringWithPathAndWithKeyword<'a> { + v: some::path::Struct<'a>, +} + +#[test] +fn test_let_destruct_with_path_and_with_keyword() { + let t = LetDestructoringWithPathAndWithKeyword { + v: some::path::Struct("hello"), + }; + assert_eq!(t.render().unwrap(), "hello"); +}