Skip to main content

futu_trd/
parsing.rs

1//! Shared user-facing trade enum parsers.
2//!
3//! Keep CLI / MCP / REST adapter parsing knowledge in `futu-trd` so schema and
4//! runtime surfaces do not drift when `Trd_Common.proto` grows a variant.
5
6use crate::types::{ModifyOrderOp, OrderType, TrdEnv, TrdSide};
7
8pub use futu_core::trade_parsing::{
9    MODIFY_OP_PARSE_CHOICES, ORDER_TYPE_INT_VALUES, ORDER_TYPE_PARSE_CHOICES,
10    TRD_ENV_PARSE_CHOICES, TRD_SIDE_PARSE_CHOICES,
11};
12
13#[must_use]
14pub fn parse_trd_env(raw: &str) -> Option<TrdEnv> {
15    futu_core::trade_parsing::parse_trd_env_id(raw).and_then(trd_env_from_i32)
16}
17
18#[must_use]
19pub fn parse_trd_side(raw: &str) -> Option<TrdSide> {
20    futu_core::trade_parsing::parse_trd_side_id(raw).and_then(trd_side_from_i32)
21}
22
23#[must_use]
24pub fn parse_order_type(raw: &str) -> Option<OrderType> {
25    futu_core::trade_parsing::parse_order_type_id(raw).and_then(order_type_from_i32)
26}
27
28#[must_use]
29pub fn trd_env_from_i32(value: i32) -> Option<TrdEnv> {
30    TrdEnv::try_from(value).ok()
31}
32
33#[must_use]
34pub fn trd_side_from_i32(value: i32) -> Option<TrdSide> {
35    TrdSide::try_from(value).ok()
36}
37
38#[must_use]
39pub fn order_type_from_i32(value: i32) -> Option<OrderType> {
40    OrderType::try_from(value).ok()
41}
42
43#[must_use]
44pub fn parse_modify_op(raw: &str) -> Option<ModifyOrderOp> {
45    futu_core::trade_parsing::parse_modify_op_id(raw).and_then(modify_op_from_i32)
46}
47
48#[must_use]
49pub fn modify_op_from_i32(value: i32) -> Option<ModifyOrderOp> {
50    ModifyOrderOp::try_from(value).ok()
51}
52
53#[cfg(test)]
54mod tests;