futu_mcp/tools/
position_corporate_actions.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_get_position_corporate_actions_impl(
15 &self,
16 Parameters(req): Parameters<ProtoJsonReq>,
17 req_ctx: RequestContext<RoleServer>,
18 ) -> std::result::Result<String, String> {
19 let c2s = handlers::proto_json::parse_c2s_json::<
20 futu_proto::trd_get_position_corporate_actions::C2s,
21 >("get-position-corporate-actions", &req.c2s_json)
22 .map_err(|error| error.to_string())?;
23 let client = self
24 .read_client_or_err(
25 "futu_get_position_corporate_actions",
26 &req_ctx,
27 req.api_key.as_deref(),
28 Some(c2s.header.acc_id),
29 )
30 .await?;
31 FutuServer::wrap_result(position_corporate_actions(client, c2s).await)
32 }
33}
34
35async fn position_corporate_actions(
36 client: Arc<FutuClient>,
37 c2s: futu_proto::trd_get_position_corporate_actions::C2s,
38) -> anyhow::Result<String> {
39 handlers::proto_json::position_corporate_actions(&client, c2s).await
40}
41
42include!(concat!(
43 env!("OUT_DIR"),
44 "/generated_mcp_routes_position_corporate_actions.rs"
45));