Skip to main content

futu_rest/routes/trd/
order_preview.rs

1//! REST adapter for the v1.8 typed pre-order impact preview.
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 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}