1use futu_core::error::{FutuError, Result};
2use futu_core::proto_id;
3use futu_net::client::FutuClient;
4
5use crate::types::{BasicQot, Security};
6
7pub async fn get_basic_qot(client: &FutuClient, securities: &[Security]) -> Result<Vec<BasicQot>> {
12 let req = futu_proto::qot_get_basic_qot::Request {
13 c2s: futu_proto::qot_get_basic_qot::C2s {
14 security_list: securities.iter().map(|s| s.to_proto()).collect(),
15 },
16 };
17
18 let body = prost::Message::encode_to_vec(&req);
19 let resp_frame = client.request(proto_id::QOT_GET_BASIC_QOT, body).await?;
20
21 let resp: futu_proto::qot_get_basic_qot::Response =
22 prost::Message::decode(resp_frame.body.as_ref()).map_err(FutuError::Proto)?;
23
24 if resp.ret_type != 0 {
25 return Err(FutuError::ServerError {
26 ret_type: resp.ret_type,
27 msg: resp.ret_msg.unwrap_or_default(),
28 });
29 }
30
31 let s2c = resp
32 .s2c
33 .ok_or(FutuError::Codec("missing s2c in GetBasicQot".into()))?;
34
35 Ok(s2c
36 .basic_qot_list
37 .iter()
38 .map(BasicQot::from_proto)
39 .collect())
40}