futu_rest/routes/trd/
order_preview.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 preview_order_impact(
20 State(state): State<RestState>,
21 rec: Option<Extension<Arc<KeyRecord>>>,
22 Json(mut body): Json<Value>,
23) -> RawApiResult {
24 normalize_and_resolve_card_num_for_route(&state, &rec, &mut body, "/api/preview-order-impact")?;
25 validate_header_trd_market(&body, "/api/preview-order-impact")?;
26 validate_header_trd_env_present(&body, "/api/preview-order-impact")?;
27 read_handler_acc_id_check(
28 &state,
29 rec.as_deref().map(|record| record.as_ref()),
30 &body,
31 "/api/preview-order-impact",
32 )?;
33 adapter::proto_request_raw::<
34 futu_proto::trd_preview_order_impact::Request,
35 futu_proto::trd_preview_order_impact::Response,
36 >(
37 &state,
38 futu_core::proto_id::TRD_PREVIEW_ORDER_IMPACT,
39 Some(body),
40 )
41 .await
42}