From cddfddf1c84c9c014f20e1d35df9fcb8dbde04a0 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 16 Jan 2020 17:44:26 +1000 Subject: [PATCH] save filters and field name separately --- rslib/src/err.rs | 8 ++++---- rslib/src/template.rs | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/rslib/src/err.rs b/rslib/src/err.rs index d57eee395..b664dee9e 100644 --- a/rslib/src/err.rs +++ b/rslib/src/err.rs @@ -26,7 +26,7 @@ pub enum TemplateError { NoClosingBrackets(String), ConditionalNotClosed(String), ConditionalNotOpen(String), - FieldNotFound(String), + FieldNotFound { filters: String, field: String }, } impl From for AnkiError { @@ -40,9 +40,9 @@ impl From for AnkiError { TemplateError::ConditionalNotOpen(tag) => { format!("missing '{{{{#{}}}}}' or '{{{{^{}}}}}'", tag, tag) } - TemplateError::FieldNotFound(field) => format!( - "found '{{{{{}}}}}', but there is no field called '{}'", - field, field + TemplateError::FieldNotFound { field, filters } => format!( + "found '{{{{{}{}}}}}', but there is no field called '{}'", + filters, field, field ), }, } diff --git a/rslib/src/template.rs b/rslib/src/template.rs index de22b4f81..0858c29a1 100644 --- a/rslib/src/template.rs +++ b/rslib/src/template.rs @@ -330,14 +330,17 @@ fn render_into( Some(text) => apply_filters(text, filters, key, context), None => { // unknown field encountered - let name_including_filters = filters + let filters_str = filters .iter() .rev() .cloned() - .chain(iter::once(*key)) + .chain(iter::once("")) .collect::>() .join(":"); - return Err(TemplateError::FieldNotFound(name_including_filters)); + return Err(TemplateError::FieldNotFound { + field: (*key).to_string(), + filters: filters_str, + }); } }; @@ -726,14 +729,20 @@ mod test { tmpl = PT::from_text("{{X}}").unwrap(); assert_eq!( tmpl.render(&ctx).unwrap_err(), - TemplateError::FieldNotFound("X".to_owned()) + TemplateError::FieldNotFound { + field: "X".to_owned(), + filters: "".to_owned() + } ); // unknown field with filters tmpl = PT::from_text("{{foo:text:X}}").unwrap(); assert_eq!( tmpl.render(&ctx).unwrap_err(), - TemplateError::FieldNotFound("foo:text:X".to_owned()) + TemplateError::FieldNotFound { + field: "X".to_owned(), + filters: "foo:text:".to_owned() + } ); // a blank field is allowed if it has filters