stock_rust/stocks/transforms/
base.rs1use 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}