Skip to main content

grapheme_stdlib/
json.rs

1use serde_json::{json, Value as JsonValue};
2
3pub fn parse(args: &JsonValue) -> JsonValue {
4    let text = arg_text(args, "text");
5    match serde_json::from_str::<JsonValue>(&text) {
6        Ok(value) => value,
7        Err(err) => json!({ "error": format!("json parse failed: {err}") }),
8    }
9}
10
11fn arg_text(args: &JsonValue, key: &str) -> String {
12    args.get(key)
13        .and_then(|v| v.as_str())
14        .map(ToOwned::to_owned)
15        .or_else(|| {
16            args.get("__input")
17                .and_then(|v| v.as_str())
18                .map(ToOwned::to_owned)
19        })
20        .unwrap_or_default()
21}