Skip to main content

futu_mcp/tools/
order_preview.rs

1//! MCP proto-JSON adapter for v1.8 pre-order impact preview.
2
3use 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));