mod emit;
mod evaluate;
mod evaluate_next;
mod types;
pub use types::{HandleResult, ToolCallHandler, ToolCallHandlerConfig};
use super::decision::DecisionEmitter;
use super::identity::ToolIdentity;
use super::jsonrpc::JsonRpcRequest;
use super::lifecycle::LifecycleEmitter;
use super::policy::{McpPolicy, PolicyState};
use super::tool_definition::ToolDefinitionBinding;
use crate::runtime::{Authorizer, MandateData};
use serde_json::Value;
use std::sync::Arc;
impl ToolCallHandler {
pub fn new(
policy: McpPolicy,
authorizer: Option<Authorizer>,
emitter: Arc<dyn DecisionEmitter>,
config: ToolCallHandlerConfig,
) -> Self {
types::new_handler(policy, authorizer, emitter, config)
}
pub fn with_lifecycle_emitter(self, emitter: Arc<dyn LifecycleEmitter>) -> Self {
types::with_lifecycle_emitter(self, emitter)
}
pub fn handle_tool_call(
&self,
request: &JsonRpcRequest,
state: &mut PolicyState,
runtime_identity: Option<&ToolIdentity>,
mandate: Option<&MandateData>,
transaction_object: Option<&Value>,
) -> HandleResult {
evaluate::handle_tool_call(
self,
request,
state,
runtime_identity,
None,
mandate,
transaction_object,
)
}
pub fn handle_tool_call_with_tool_definition_binding(
&self,
request: &JsonRpcRequest,
state: &mut PolicyState,
runtime_identity: Option<&ToolIdentity>,
tool_definition_binding: Option<&ToolDefinitionBinding>,
mandate: Option<&MandateData>,
transaction_object: Option<&Value>,
) -> HandleResult {
evaluate::handle_tool_call(
self,
request,
state,
runtime_identity,
tool_definition_binding,
mandate,
transaction_object,
)
}
}
#[cfg(test)]
mod tests;