Skip to main content

stock_rust/stocks/transforms/
base.rs

1use anyhow::{anyhow, Result};
2
3use crate::stocks::base::{COMMON_HK, COMMON_SH, COMMON_SZ, COMMON_US};
4
5pub trait CommonCodeTransform {
6    fn transform(&self, code: &str) -> Result<String>;
7
8    fn transforms(&self, codes: &[String]) -> Result<Vec<String>> {
9        codes.iter().map(|code| self.transform(code)).collect()
10    }
11
12    fn sz_transform(&self, _code: &str) -> Result<String> {
13        Err(anyhow!("未实现深交所统一代码转换股票代码"))
14    }
15
16    fn sh_transform(&self, _code: &str) -> Result<String> {
17        Err(anyhow!("未实现上交所统一代码转换股票代码"))
18    }
19
20    fn hk_transform(&self, _code: &str) -> Result<String> {
21        Err(anyhow!("未实现港交所统一代码转换股票代码"))
22    }
23
24    fn us_transform(&self, _code: &str) -> Result<String> {
25        Err(anyhow!("未实现美交所统一代码转换股票代码"))
26    }
27}
28
29pub trait ApiCodeTransform {
30    fn transform(&self, code: &str) -> Result<String>;
31
32    fn transforms(&self, codes: &[String]) -> Result<Vec<String>> {
33        codes.iter().map(|code| self.transform(code)).collect()
34    }
35
36    fn sz_transform(&self, _code: &str) -> Result<String> {
37        Err(anyhow!("未实现深交所股票代码转换统一代码"))
38    }
39
40    fn sh_transform(&self, _code: &str) -> Result<String> {
41        Err(anyhow!("未实现上交所股票代码转换统一代码"))
42    }
43
44    fn hk_transform(&self, _code: &str) -> Result<String> {
45        Err(anyhow!("未实现港交所股票代码转换统一代码"))
46    }
47
48    fn us_transform(&self, _code: &str) -> Result<String> {
49        Err(anyhow!("未实现美交所股票代码转换统一代码"))
50    }
51}
52
53pub struct BaseCommonCodeTransform;
54
55impl CommonCodeTransform for BaseCommonCodeTransform {
56    fn transform(&self, code: &str) -> Result<String> {
57        if code.starts_with(COMMON_SH) {
58            return self.sh_transform(code);
59        }
60        if code.starts_with(COMMON_SZ) {
61            return self.sz_transform(code);
62        }
63        if code.starts_with(COMMON_HK) {
64            return self.hk_transform(code);
65        }
66        if code.starts_with(COMMON_US) {
67            return self.us_transform(code);
68        }
69
70        Err(anyhow!("请检查统一代码是否正确"))
71    }
72}
73
74pub struct BaseApiCodeTransform;
75
76impl ApiCodeTransform for BaseApiCodeTransform {
77    fn transform(&self, code: &str) -> Result<String> {
78        if code.starts_with(COMMON_SH) {
79            return self.sh_transform(code);
80        }
81        if code.starts_with(COMMON_SZ) {
82            return self.sz_transform(code);
83        }
84        if code.starts_with(COMMON_HK) {
85            return self.hk_transform(code);
86        }
87        if code.starts_with(COMMON_US) {
88            return self.us_transform(code);
89        }
90
91        Err(anyhow!("请检查股票代码是否正确"))
92    }
93}