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}