futu_rest/routes/trd/
position_corporate_actions.rs1use std::sync::Arc;
4
5use axum::Json;
6use axum::extract::{Extension, State};
7use serde_json::Value;
8
9use futu_auth::KeyRecord;
10
11use crate::adapter::{self, RestState};
12
13use super::RawApiResult;
14use super::card_num::normalize_and_resolve_card_num_for_route;
15use super::validation::{
16 read_handler_acc_id_check, validate_header_trd_env_present, validate_header_trd_market,
17};
18
19pub async fn position_corporate_actions(
20 State(state): State<RestState>,
21 rec: Option<Extension<Arc<KeyRecord>>>,
22 Json(mut body): Json<Value>,
23) -> RawApiResult {
24 const PATH: &str = "/api/trd/position-corporate-actions";
25 normalize_and_resolve_card_num_for_route(&state, &rec, &mut body, PATH)?;
26 validate_header_trd_market(&body, PATH)?;
27 validate_header_trd_env_present(&body, PATH)?;
28 read_handler_acc_id_check(
29 &state,
30 rec.as_deref().map(|record| record.as_ref()),
31 &body,
32 PATH,
33 )?;
34 adapter::proto_request_raw::<
35 futu_proto::trd_get_position_corporate_actions::Request,
36 futu_proto::trd_get_position_corporate_actions::Response,
37 >(
38 &state,
39 futu_core::proto_id::TRD_GET_POSITION_CORPORATE_ACTIONS,
40 Some(body),
41 )
42 .await
43}