use std::sync::Arc;
#[cfg(feature = "tracing")]
use tracing::instrument;
use async_trait::async_trait;
use serde_json::Value;
use tokio_util::sync::CancellationToken;
use crate::Error;
mod registry;
pub use registry::ToolRegistry;
#[derive(Clone)]
pub struct ToolContext {
pub cancellation_token: CancellationToken,
}
#[async_trait]
pub trait Tool: Send + Sync + 'static {
fn name(&self) -> &str;
#[cfg_attr(feature = "tracing", instrument(skip(self, _input, _ctx)))]
async fn call(&self, _input: Value, _ctx: ToolContext) -> Result<Value, Error> {
Ok(Value::Null)
}
}
pub type DynTool = Arc<dyn Tool>;