Skip to main content

futu_rest/routes/qot/
option_analytics.rs

1use axum::extract::{Json, State};
2use prost::Message;
3use serde::Serialize;
4use serde::de::DeserializeOwned;
5use serde_json::Value;
6
7use crate::adapter::{self, RestState};
8
9use super::RawApiResult;
10
11async fn raw_option_analytics_request<Req, Rsp>(
12    state: &RestState,
13    proto_id: u32,
14    body: Value,
15) -> RawApiResult
16where
17    Req: Message + Default + DeserializeOwned,
18    Rsp: Message + Default + Serialize,
19{
20    adapter::proto_request_raw::<Req, Rsp>(state, proto_id, Some(body)).await
21}
22
23pub async fn option_market_statistic(
24    State(state): State<RestState>,
25    Json(body): Json<Value>,
26) -> RawApiResult {
27    raw_option_analytics_request::<
28        futu_proto::qot_get_option_market_statistic::Request,
29        futu_proto::qot_get_option_market_statistic::Response,
30    >(
31        &state,
32        futu_core::proto_id::QOT_GET_OPTION_MARKET_STATISTIC,
33        body,
34    )
35    .await
36}
37
38pub async fn option_underlying_his_statistic(
39    State(state): State<RestState>,
40    Json(body): Json<Value>,
41) -> RawApiResult {
42    raw_option_analytics_request::<
43        futu_proto::qot_get_option_underlying_his_statistic::Request,
44        futu_proto::qot_get_option_underlying_his_statistic::Response,
45    >(
46        &state,
47        futu_core::proto_id::QOT_GET_OPTION_UNDERLYING_HIS_STATISTIC,
48        body,
49    )
50    .await
51}
52
53pub async fn option_underlying_overview(
54    State(state): State<RestState>,
55    Json(body): Json<Value>,
56) -> RawApiResult {
57    raw_option_analytics_request::<
58        futu_proto::qot_get_option_underlying_overview::Request,
59        futu_proto::qot_get_option_underlying_overview::Response,
60    >(
61        &state,
62        futu_core::proto_id::QOT_GET_OPTION_UNDERLYING_OVERVIEW,
63        body,
64    )
65    .await
66}
67
68pub async fn option_underlying_his_volatility(
69    State(state): State<RestState>,
70    Json(body): Json<Value>,
71) -> RawApiResult {
72    raw_option_analytics_request::<
73        futu_proto::qot_get_option_underlying_his_volatility::Request,
74        futu_proto::qot_get_option_underlying_his_volatility::Response,
75    >(
76        &state,
77        futu_core::proto_id::QOT_GET_OPTION_UNDERLYING_HIS_VOLATILITY,
78        body,
79    )
80    .await
81}
82
83pub async fn option_underlying_rank(
84    State(state): State<RestState>,
85    Json(body): Json<Value>,
86) -> RawApiResult {
87    raw_option_analytics_request::<
88        futu_proto::qot_get_option_underlying_rank::Request,
89        futu_proto::qot_get_option_underlying_rank::Response,
90    >(
91        &state,
92        futu_core::proto_id::QOT_GET_OPTION_UNDERLYING_RANK,
93        body,
94    )
95    .await
96}
97
98pub async fn option_rank(State(state): State<RestState>, Json(body): Json<Value>) -> RawApiResult {
99    raw_option_analytics_request::<
100        futu_proto::qot_get_option_rank::Request,
101        futu_proto::qot_get_option_rank::Response,
102    >(&state, futu_core::proto_id::QOT_GET_OPTION_RANK, body)
103    .await
104}
105
106pub async fn option_event(State(state): State<RestState>, Json(body): Json<Value>) -> RawApiResult {
107    raw_option_analytics_request::<
108        futu_proto::qot_get_option_event::Request,
109        futu_proto::qot_get_option_event::Response,
110    >(&state, futu_core::proto_id::QOT_GET_OPTION_EVENT, body)
111    .await
112}
113
114pub async fn option_event_alert(
115    State(state): State<RestState>,
116    Json(body): Json<Value>,
117) -> RawApiResult {
118    raw_option_analytics_request::<
119        futu_proto::qot_get_option_event_alert::Request,
120        futu_proto::qot_get_option_event_alert::Response,
121    >(
122        &state,
123        futu_core::proto_id::QOT_GET_OPTION_EVENT_ALERT,
124        body,
125    )
126    .await
127}
128
129pub async fn set_option_event_alert(
130    State(state): State<RestState>,
131    Json(body): Json<Value>,
132) -> RawApiResult {
133    raw_option_analytics_request::<
134        futu_proto::qot_set_option_event_alert::Request,
135        futu_proto::qot_set_option_event_alert::Response,
136    >(
137        &state,
138        futu_core::proto_id::QOT_SET_OPTION_EVENT_ALERT,
139        body,
140    )
141    .await
142}
143
144pub async fn option_zero_dte_screener(
145    State(state): State<RestState>,
146    Json(body): Json<Value>,
147) -> RawApiResult {
148    raw_option_analytics_request::<
149        futu_proto::qot_get_option_zero_dte_screener::Request,
150        futu_proto::qot_get_option_zero_dte_screener::Response,
151    >(
152        &state,
153        futu_core::proto_id::QOT_GET_OPTION_ZERO_DTE_SCREENER,
154        body,
155    )
156    .await
157}
158
159pub async fn option_zero_dte_contract(
160    State(state): State<RestState>,
161    Json(body): Json<Value>,
162) -> RawApiResult {
163    raw_option_analytics_request::<
164        futu_proto::qot_get_option_zero_dte_contract::Request,
165        futu_proto::qot_get_option_zero_dte_contract::Response,
166    >(
167        &state,
168        futu_core::proto_id::QOT_GET_OPTION_ZERO_DTE_CONTRACT,
169        body,
170    )
171    .await
172}
173
174pub async fn option_earnings_screener(
175    State(state): State<RestState>,
176    Json(body): Json<Value>,
177) -> RawApiResult {
178    raw_option_analytics_request::<
179        futu_proto::qot_get_option_earnings_screener::Request,
180        futu_proto::qot_get_option_earnings_screener::Response,
181    >(
182        &state,
183        futu_core::proto_id::QOT_GET_OPTION_EARNINGS_SCREENER,
184        body,
185    )
186    .await
187}
188
189pub async fn option_seller_screener(
190    State(state): State<RestState>,
191    Json(body): Json<Value>,
192) -> RawApiResult {
193    raw_option_analytics_request::<
194        futu_proto::qot_get_option_seller_screener::Request,
195        futu_proto::qot_get_option_seller_screener::Response,
196    >(
197        &state,
198        futu_core::proto_id::QOT_GET_OPTION_SELLER_SCREENER,
199        body,
200    )
201    .await
202}