Skip to main content

futu_rest/routes/trd/
position_corporate_actions.rs

1//! REST adapter for v1.8 position-related corporate-action risk.
2
3use 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}