Files
zclaw_openfang/crates/zclaw-runtime/src/tool/builtin/web_fetch.rs

62 lines
1.4 KiB
Rust

//! Web fetch tool
use async_trait::async_trait;
use serde_json::{json, Value};
use zclaw_types::{Result, ZclawError};
use crate::tool::{Tool, ToolContext};
pub struct WebFetchTool;
impl WebFetchTool {
pub fn new() -> Self {
Self
}
}
#[async_trait]
impl Tool for WebFetchTool {
fn name(&self) -> &str {
"web_fetch"
}
fn description(&self) -> &str {
"Fetch content from a URL"
}
fn input_schema(&self) -> Value {
json!({
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL to fetch"
},
"method": {
"type": "string",
"enum": ["GET", "POST"],
"description": "HTTP method (default: GET)"
}
},
"required": ["url"]
})
}
async fn execute(&self, input: Value, _context: &ToolContext) -> Result<Value> {
let url = input["url"].as_str()
.ok_or_else(|| ZclawError::InvalidInput("Missing 'url' parameter".into()))?;
// TODO: Implement actual web fetching with SSRF protection
Ok(json!({
"status": 200,
"content": format!("Fetched content placeholder for: {}", url)
}))
}
}
impl Default for WebFetchTool {
fn default() -> Self {
Self::new()
}
}