1use std::path::PathBuf;
6
7use crate::dividend::DividendError;
8use crate::finance::FinanceError;
9use thiserror::Error;
10
11#[cfg(feature = "polars")]
12use polars::error::PolarsError;
13
14#[derive(Error, Debug)]
16pub enum TickParseError {
17 #[error("文件路径不能为空")]
19 EmptyPath,
20 #[error("文件必须是.dat或.DAT格式: {0}")]
22 InvalidExtension(String),
23 #[error("无法从文件名解析日期")]
25 InvalidFileName,
26 #[error("IO错误: {0}")]
28 Io(#[from] std::io::Error),
29 #[cfg(feature = "polars")]
31 #[error("Polars错误: {0}")]
32 Polars(#[from] PolarsError),
33}
34
35#[derive(Debug, Error)]
37pub enum MetadataParseError {
38 #[error("failed to read metadata file: {0}")]
40 Io(#[from] std::io::Error),
41 #[error("no records parsed from {0}")]
43 NoRecords(&'static str),
44}
45
46#[derive(Error, Debug)]
48pub enum MinParseError {
49 #[error("文件路径不能为空")]
51 EmptyPath,
52 #[error("文件必须是.dat或.DAT格式: {0}")]
54 InvalidExtension(String),
55 #[error("IO错误: {0}")]
57 Io(#[from] std::io::Error),
58 #[cfg(feature = "polars")]
60 #[error("Polars错误: {0}")]
61 Polars(#[from] PolarsError),
62}
63
64#[derive(Error, Debug)]
66pub enum DailyParseError {
67 #[error("文件路径不能为空")]
69 EmptyPath,
70 #[error("文件必须是.dat或.DAT格式: {0}")]
72 InvalidExtension(String),
73 #[error("开始日期格式错误: {0}")]
75 InvalidStartDate(String),
76 #[error("结束日期格式错误: {0}")]
78 InvalidEndDate(String),
79 #[error("无效的时间戳")]
81 InvalidTimestamp,
82 #[error("IO错误: {0}")]
84 Io(#[from] std::io::Error),
85 #[cfg(feature = "polars")]
87 #[error("Polars错误: {0}")]
88 Polars(#[from] PolarsError),
89}
90
91#[derive(Debug, Error)]
93pub enum DataDirError {
94 #[error("invalid datadir root: {}", .0.display())]
96 InvalidRoot(PathBuf),
97 #[error("invalid datadir input: {0}")]
99 InvalidInput(String),
100 #[error("unable to locate {kind}; tried: {tried:?}")]
102 PathNotFound {
103 kind: &'static str,
105 tried: Vec<PathBuf>,
107 },
108 #[error(transparent)]
110 Tick(#[from] TickParseError),
111 #[error(transparent)]
113 Min(#[from] MinParseError),
114 #[error(transparent)]
116 Daily(#[from] DailyParseError),
117 #[error(transparent)]
119 Metadata(#[from] MetadataParseError),
120 #[error(transparent)]
122 Finance(#[from] FinanceError),
123 #[error(transparent)]
125 Dividend(#[from] DividendError),
126}