use serde_json::{json, Value};
use crate::proxy::DaemonClient;
fn to_string(v: Value) -> Result<String, String> {
serde_json::to_string(&v).map_err(|e| e.to_string())
}
pub async fn resolve(
client: &DaemonClient,
need: &str,
limit: Option<u32>,
) -> Result<String, String> {
let mut params = json!({ "need": need });
if let Some(l) = limit {
params["limit"] = json!(l);
}
client
.call("discovery.resolve", params)
.await
.and_then(to_string)
}
#[allow(clippy::too_many_arguments)]
pub async fn route_compose(
client: &DaemonClient,
need: &str,
max_subtasks: Option<u32>,
decomposition_mode: Option<&str>,
sad_hints: Option<u32>,
sad_iterations: Option<u32>,
sad_convergence_jaccard: Option<f64>,
candidates_per_step: Option<u32>,
rerank: bool,
) -> Result<String, String> {
let mut params = json!({ "need": need, "rerank": rerank });
if let Some(v) = max_subtasks {
params["max_subtasks"] = json!(v);
}
if let Some(v) = decomposition_mode {
params["decomposition_mode"] = json!(v);
}
if let Some(v) = sad_hints {
params["sad_hints"] = json!(v);
}
if let Some(v) = sad_iterations {
params["sad_iterations"] = json!(v);
}
if let Some(v) = sad_convergence_jaccard {
params["sad_convergence_jaccard"] = json!(v);
}
if let Some(v) = candidates_per_step {
params["candidates_per_step"] = json!(v);
}
client
.call("discovery.route_compose", params)
.await
.and_then(to_string)
}