diff --git a/askama/src/filters/builtin.rs b/askama/src/filters/builtin.rs index 0ab6a365..a7931460 100644 --- a/askama/src/filters/builtin.rs +++ b/askama/src/filters/builtin.rs @@ -473,11 +473,11 @@ impl FastWritable for Pluralize { /// "b,c," /// ); /// ``` -pub fn reject( - it: impl IntoIterator, - filter: T, -) -> Result, Infallible> { - Ok(it.into_iter().filter(move |v| v != &filter)) +pub fn reject<'a, T: PartialEq, U: IntoIterator>( + it: U, + filter: &'a T, +) -> Result + use<'a, T, U>, Infallible> { + Ok(it.into_iter().filter(move |v| v != filter)) } /// Returns an iterator without filtered out values. @@ -505,9 +505,9 @@ pub fn reject( /// ); /// } /// ``` -pub fn reject_with bool>( +pub fn reject_with bool>( it: impl IntoIterator, - callback: F, + mut callback: F, ) -> Result, Infallible> { Ok(it.into_iter().filter(move |v| !callback(v))) } diff --git a/askama_derive/src/generator/filter.rs b/askama_derive/src/generator/filter.rs index 9762c1dc..cc0a5524 100644 --- a/askama_derive/src/generator/filter.rs +++ b/askama_derive/src/generator/filter.rs @@ -260,9 +260,12 @@ impl<'a> Generator<'a, '_> { self.visit_arg(ctx, buf, input)?; buf.write(','); if extra_ampersand { - buf.write('&'); + buf.write("&&("); } self.visit_arg(ctx, buf, filter)?; + if extra_ampersand { + buf.write(')'); + } buf.write(")?"); Ok(DisplayWrap::Wrapped) }