use std::path::PathBuf;
use crate::dividend::DividendError;
use crate::finance::FinanceError;
use thiserror::Error;
#[cfg(feature = "polars")]
use polars::error::PolarsError;
#[derive(Error, Debug)]
pub enum TickParseError {
#[error("文件路径不能为空")]
EmptyPath,
#[error("文件必须是.dat或.DAT格式: {0}")]
InvalidExtension(String),
#[error("无法从文件名解析日期")]
InvalidFileName,
#[error("IO错误: {0}")]
Io(#[from] std::io::Error),
#[cfg(feature = "polars")]
#[error("Polars错误: {0}")]
Polars(#[from] PolarsError),
}
#[derive(Debug, Error)]
pub enum MetadataParseError {
#[error("failed to read metadata file: {0}")]
Io(#[from] std::io::Error),
#[error("no records parsed from {0}")]
NoRecords(&'static str),
}
#[derive(Error, Debug)]
pub enum MinParseError {
#[error("文件路径不能为空")]
EmptyPath,
#[error("文件必须是.dat或.DAT格式: {0}")]
InvalidExtension(String),
#[error("IO错误: {0}")]
Io(#[from] std::io::Error),
#[cfg(feature = "polars")]
#[error("Polars错误: {0}")]
Polars(#[from] PolarsError),
}
#[derive(Error, Debug)]
pub enum DailyParseError {
#[error("文件路径不能为空")]
EmptyPath,
#[error("文件必须是.dat或.DAT格式: {0}")]
InvalidExtension(String),
#[error("开始日期格式错误: {0}")]
InvalidStartDate(String),
#[error("结束日期格式错误: {0}")]
InvalidEndDate(String),
#[error("无效的时间戳")]
InvalidTimestamp,
#[error("IO错误: {0}")]
Io(#[from] std::io::Error),
#[cfg(feature = "polars")]
#[error("Polars错误: {0}")]
Polars(#[from] PolarsError),
}
#[derive(Debug, Error)]
pub enum DataDirError {
#[error("invalid datadir root: {}", .0.display())]
InvalidRoot(PathBuf),
#[error("invalid datadir input: {0}")]
InvalidInput(String),
#[error("unable to locate {kind}; tried: {tried:?}")]
PathNotFound {
kind: &'static str,
tried: Vec<PathBuf>,
},
#[error(transparent)]
Tick(#[from] TickParseError),
#[error(transparent)]
Min(#[from] MinParseError),
#[error(transparent)]
Daily(#[from] DailyParseError),
#[error(transparent)]
Metadata(#[from] MetadataParseError),
#[error(transparent)]
Finance(#[from] FinanceError),
#[error(transparent)]
Dividend(#[from] DividendError),
}