mifi_rs/
mifi.rs

1use std::clone::Clone;
2use std::collections::{BTreeMap, HashMap};
3
4use serde::{Deserialize, Serialize};
5
6use crate::base::*;
7use crate::front::{HqTrend, HqTrendSlice};
8
9/// 此行情协议主要是为沟通多个行情之间的数据然后进行交换切割, 注意T是某一类数据, 比如k线数据,
10/// topic: 主题
11/// frq: 周期
12/// market:市场
13/// history: 历史数据,注意是datetime作为key, 数据作为value,逆序
14/// portfolio: 组合信息,比如指数
15/// format: 格式成指定数据源
16/// real: 实时行情
17/// zip:是否压缩发送
18#[derive(Serialize, Clone, Deserialize, Debug)]
19pub struct Mifi<T> {
20    pub topic: String,
21    pub frq: f64,
22    pub market: String,
23    pub history: BTreeMap<String, T>,
24    pub portfolio: HashMap<String, T>,
25    pub format: String,
26    pub real: T,
27    pub zip: bool,
28}
29
30impl<T> Mifi<T>
31    where
32        T: Handler + Serialize,
33{
34    pub fn to_json(&self) -> String {
35        serde_json::to_string(&self).unwrap()
36    }
37
38    pub fn hqchart_trend(&self) -> HqTrend {
39        let slice: Vec<HqTrendSlice> = self.history.values().into_iter().map(|x| {
40            x.to_hqchart_trend_slice()
41        }).collect();
42        let code = slice.last().unwrap().code.clone();
43        let time = slice.last().unwrap().get_datetime();
44        HqTrend {
45            name: "".to_string(),
46            symbol: code,
47            time: slice.last().unwrap().get_datetime(),
48            date: time,
49            price: 0.0,
50            yclose: slice[0].open,
51            open: slice.last().unwrap().open,
52            high: slice.last().unwrap().high,
53            low: slice.last().unwrap().low,
54            vol: slice.last().unwrap().vol,
55            amount: slice.last().unwrap().amount,
56            minutecount: slice.len().clone() as f64,
57            minute: slice,
58        }
59    }
60}