ctp_rust/
config.rs

1use dotenvy::dotenv;
2use std::env;
3
4/// CTP配置信息 (别名,用于异步API)
5#[derive(Debug, Clone)]
6pub struct CtpConfig {
7    pub md_front_address: String,
8    pub trader_front_address: String,
9    pub broker_id: String,
10    pub investor_id: String,
11    pub password: String,
12    pub flow_path: String,
13    pub instruments: Vec<String>,
14    pub app_id: String,
15    pub auth_code: String,
16    pub product_info: String,
17}
18
19impl CtpConfig {
20    /// 从环境变量加载配置
21    pub fn from_env() -> Result<Self, Box<dyn std::error::Error>> {
22        dotenv().ok();
23
24        let md_front_address = env::var("MD_FRONT_ADDRESS")
25            .unwrap_or_else(|_| "tcp://121.37.80.177:20004".to_string());
26        let trader_front_address = env::var("TRADER_FRONT_ADDRESS")
27            .unwrap_or_else(|_| "tcp://121.37.80.177:20002".to_string());
28        let broker_id = env::var("BROKER_ID").unwrap_or_else(|_| "9999".to_string());
29        let investor_id =
30            env::var("INVESTOR_ID").map_err(|_| "请在.env文件中设置INVESTOR_ID环境变量")?;
31        let password = env::var("PASSWORD").map_err(|_| "请在.env文件中设置PASSWORD环境变量")?;
32        let flow_path = env::var("FLOW_PATH").unwrap_or_else(|_| "./flow".to_string());
33        let instruments_str = env::var("INSTRUMENTS").unwrap_or_else(|_| "rb2601".to_string());
34        let instruments: Vec<String> = instruments_str
35            .split(',')
36            .map(|s| s.trim().to_string())
37            .filter(|s| !s.is_empty())
38            .collect();
39
40        let app_id = env::var("APP_ID").unwrap_or_else(|_| "".to_string());
41        let auth_code = env::var("AUTH_CODE").unwrap_or_else(|_| "".to_string());
42        let product_info = env::var("PRODUCT_INFO").unwrap_or_else(|_| "".to_string());
43
44        Ok(CtpConfig {
45            md_front_address,
46            trader_front_address,
47            broker_id,
48            investor_id,
49            password,
50            flow_path,
51            instruments,
52            app_id,
53            auth_code,
54            product_info,
55        })
56    }
57}