use anyhow::{anyhow, Result};
use crate::stocks::base::{COMMON_HK, COMMON_SH, COMMON_SZ, COMMON_US};
pub trait CommonCodeTransform {
fn transform(&self, code: &str) -> Result<String>;
fn transforms(&self, codes: &[String]) -> Result<Vec<String>> {
codes.iter().map(|code| self.transform(code)).collect()
}
fn sz_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现深交所统一代码转换股票代码"))
}
fn sh_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现上交所统一代码转换股票代码"))
}
fn hk_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现港交所统一代码转换股票代码"))
}
fn us_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现美交所统一代码转换股票代码"))
}
}
pub trait ApiCodeTransform {
fn transform(&self, code: &str) -> Result<String>;
fn transforms(&self, codes: &[String]) -> Result<Vec<String>> {
codes.iter().map(|code| self.transform(code)).collect()
}
fn sz_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现深交所股票代码转换统一代码"))
}
fn sh_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现上交所股票代码转换统一代码"))
}
fn hk_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现港交所股票代码转换统一代码"))
}
fn us_transform(&self, _code: &str) -> Result<String> {
Err(anyhow!("未实现美交所股票代码转换统一代码"))
}
}
pub struct BaseCommonCodeTransform;
impl CommonCodeTransform for BaseCommonCodeTransform {
fn transform(&self, code: &str) -> Result<String> {
if code.starts_with(COMMON_SH) {
return self.sh_transform(code);
}
if code.starts_with(COMMON_SZ) {
return self.sz_transform(code);
}
if code.starts_with(COMMON_HK) {
return self.hk_transform(code);
}
if code.starts_with(COMMON_US) {
return self.us_transform(code);
}
Err(anyhow!("请检查统一代码是否正确"))
}
}
pub struct BaseApiCodeTransform;
impl ApiCodeTransform for BaseApiCodeTransform {
fn transform(&self, code: &str) -> Result<String> {
if code.starts_with(COMMON_SH) {
return self.sh_transform(code);
}
if code.starts_with(COMMON_SZ) {
return self.sz_transform(code);
}
if code.starts_with(COMMON_HK) {
return self.hk_transform(code);
}
if code.starts_with(COMMON_US) {
return self.us_transform(code);
}
Err(anyhow!("请检查股票代码是否正确"))
}
}