weaver_lib/filters/
json.rs

1use liquid::Error;
2use liquid_core::{Display_filter, Filter, FilterReflection, ParseFilter};
3use liquid_core::{Result, Runtime};
4use liquid_core::{Value, ValueView};
5
6#[derive(Clone, ParseFilter, FilterReflection)]
7#[filter(
8    name = "json",
9    description = "Output the raw input unescaped.",
10    parsed(JSONFilter)
11)]
12pub struct JSON;
13
14#[derive(Debug, Default, Display_filter)]
15#[name = "json"]
16struct JSONFilter;
17
18impl Filter for JSONFilter {
19    fn evaluate(&self, input: &dyn ValueView, _runtime: &dyn Runtime) -> Result<Value> {
20        let serde_value = input.to_value();
21
22        // Now, serialize the serde_json::Value to a JSON string
23        let json_string = serde_json::to_string_pretty(&serde_value)
24            .map_err(|e| Error::with_msg(format!("Failed to serialize to JSON: {}", e)))?;
25
26        println!("JSON DUMP: {}", &json_string);
27
28        // Return the JSON string as a liquid_core::Value::scalar
29        Ok(Value::scalar(json_string))
30    }
31}