futu_mcp/tools/
order_preview.rs1use std::sync::Arc;
4
5use futu_net::client::FutuClient;
6use rmcp::{RoleServer, handler::server::wrapper::Parameters, service::RequestContext};
7
8use crate::handlers;
9use crate::tool_args::ProtoJsonReq;
10
11use super::FutuServer;
12
13impl FutuServer {
14 async fn futu_preview_order_impact_impl(
15 &self,
16 Parameters(req): Parameters<ProtoJsonReq>,
17 req_ctx: RequestContext<RoleServer>,
18 ) -> std::result::Result<String, String> {
19 let c2s = match handlers::proto_json::parse_c2s_json::<
20 futu_proto::trd_preview_order_impact::C2s,
21 >("preview-order-impact", &req.c2s_json)
22 {
23 Ok(c2s) => c2s,
24 Err(error) => return FutuServer::tool_err(error),
25 };
26 let acc_id = c2s.header.acc_id;
27 let client = self
28 .read_client_or_err(
29 "futu_preview_order_impact",
30 &req_ctx,
31 req.api_key.as_deref(),
32 Some(acc_id),
33 )
34 .await?;
35 FutuServer::wrap_result(preview_order_impact(client, c2s).await)
36 }
37}
38
39async fn preview_order_impact(
40 client: Arc<FutuClient>,
41 c2s: futu_proto::trd_preview_order_impact::C2s,
42) -> anyhow::Result<String> {
43 handlers::proto_json::preview_order_impact(&client, c2s).await
44}
45
46include!(concat!(
47 env!("OUT_DIR"),
48 "/generated_mcp_routes_order_preview.rs"
49));