snm_brightdata_client/
rpc_client.rs

1// src/rpc_client.rs
2
3use crate::types::{ToolCallRequest, ToolCallResponse};
4use crate::error::BrightDataError;
5use crate::tool::Tool;
6use serde_json::Value;
7
8pub struct RpcClient;
9
10impl RpcClient {
11    /// Directly dispatch to the Rust-native tool implementation instead of spawning Node.js.
12    pub async fn call_tool(tool_name: &str, parameters: Value) -> Result<Value, BrightDataError> {
13        match tool_name {
14            "scrape_website" => {
15                crate::tools::scrape::ScrapeMarkdown
16                    .execute_legacy(parameters)
17                    .await
18            }
19            "search_web" => {
20                crate::tools::search::SearchEngine
21                    .execute_legacy(parameters)
22                    .await
23            }
24            "extract_data" => {
25                crate::tools::extract::Extractor
26                    .execute_legacy(parameters)
27                    .await
28            }
29            "take_screenshot" => {
30                crate::tools::screenshot::ScreenshotTool
31                    .execute_legacy(parameters)
32                    .await
33            }
34            _ => Err(BrightDataError::ToolError(format!(
35                "Unknown tool: {}",
36                tool_name
37            ))),
38        }
39    }
40}