(
dispatch: DaemonToolDispatch,
tool_name: &str,
tool_args: Value,
raw_json: bool,
)
| 260 | } |
| 261 | |
| 262 | async fn dispatch_daemon_tool( |
| 263 | dispatch: DaemonToolDispatch, |
| 264 | tool_name: &str, |
| 265 | tool_args: Value, |
| 266 | raw_json: bool, |
| 267 | ) -> Result<()> { |
| 268 | let result_value = match dispatch.call(tool_name, tool_args.clone()).await { |
| 269 | Ok(value) => value, |
| 270 | Err(error) if is_daemon_unavailable(&error) => { |
| 271 | match dispatch.fallback(tool_name, tool_args).await? { |
| 272 | Some(value) => value, |
| 273 | None => return Err(error), |
| 274 | } |
| 275 | } |
| 276 | Err(error) => return Err(error), |
| 277 | }; |
| 278 | print_tool_output(&result_value, raw_json); |
| 279 | Ok(()) |
| 280 | } |
| 281 | |
| 282 | fn is_daemon_unavailable(error: &TraceDecayError) -> bool { |
| 283 | matches!( |
no test coverage detected