use serde_json::Value; // Extract db config: sql, params, outputKey, connection from a node pub fn extract_db_cfg(n: &Value) -> Option { let data = n.get("data"); let db_cfg = data.and_then(|d| d.get("db")).and_then(|v| v.as_object())?; let mut db_obj = serde_json::Map::new(); // sql can be string or object with content let raw_sql = db_cfg.get("sql"); let sql = match raw_sql { Some(Value::String(s)) => super::sanitize_wrapped(s), Some(Value::Object(o)) => o .get("content") .and_then(|v| v.as_str()) .map(super::sanitize_wrapped) .unwrap_or_default(), _ => String::new(), }; if !sql.is_empty() { db_obj.insert("sql".into(), Value::String(sql)); } if let Some(p) = db_cfg.get("params") { db_obj.insert("params".into(), p.clone()); } if let Some(Value::String(k)) = db_cfg.get("outputKey") { db_obj.insert("outputKey".into(), Value::String(k.clone())); } if let Some(conn) = db_cfg.get("connection") { db_obj.insert("connection".into(), conn.clone()); } if db_obj.is_empty() { None } else { Some(Value::Object(db_obj)) } }