liquid_filter_reverse_string/
lib.rs1use 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}