liquid_filter_reverse_string/
lib.rs

1use liquid_core::{
2    Display_filter, Filter, FilterReflection, ParseFilter, Result, Runtime, Value, ValueView,
3};
4
5#[derive(Clone, ParseFilter, FilterReflection)]
6#[filter(
7    name = "reversestr",
8    description = "Reverse string.",
9    parsed(ReverseStrFilter)
10)]
11pub struct ReverseStr;
12
13#[derive(Debug, Default, Display_filter)]
14#[name = "reversestr"]
15pub struct ReverseStrFilter;
16
17impl Filter for ReverseStrFilter {
18    fn evaluate(&self, input: &dyn ValueView, _runtime: &dyn Runtime) -> Result<Value> {
19        let text = input.to_kstr();
20        let reversed: String = text.chars().rev().collect();
21        Ok(Value::scalar(reversed.to_string()))
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    pub fn test_reverse() {
31        let text = "{{ text | reversestr}}";
32        let globals = liquid::object!({
33            "text": "Hello!",
34        });
35        let template = liquid::ParserBuilder::with_stdlib()
36            .filter(ReverseStr)
37            .build()
38            .unwrap()
39            .parse(text)
40            .unwrap();
41        let output = template.render(&globals).unwrap();
42        assert_eq!(output, "!olleH".to_string());
43    }
44}