use thiserror::Error;
use crate::generics::order::OrderError;
pub type CoreResult<T> = std::result::Result<T, CoreError>;
#[derive(Debug, Error)]
pub enum CoreError {
#[error("API error: {0}")]
ApiError(String),
#[error("Safety error")]
SafetyError,
#[error("Local DB error: {0}")]
DbError(String),
#[error("Parameters error: {0}")]
ParamError(String),
#[error("{0}")]
OrderError(#[from] OrderError),
#[error("Computation error: {0}")]
ComputError(String),
#[error("Unavailable data")]
UnavailableData,
#[error("GTrend-rs error: {0}")]
GTrendError(#[from] gtrend_rs::Error),
}
impl From<surrealdb::Error> for CoreError {
fn from(value: surrealdb::Error) -> Self {
CoreError::DbError(value.to_string())
}
}
impl From<chrono::ParseError> for CoreError {
fn from(value: chrono::ParseError) -> Self {
CoreError::ComputError(value.to_string())
}
}
impl From<serde_json::Error> for CoreError {
fn from(value: serde_json::Error) -> Self {
CoreError::ComputError(value.to_string())
}
}
impl From<chrono::RoundingError> for CoreError {
fn from(value: chrono::RoundingError) -> Self {
CoreError::ComputError(value.to_string())
}
}
impl CoreError {
pub fn param_error(msg: &str) -> Self {
CoreError::ParamError(msg.to_string())
}
pub fn db_error(msg: &str) -> Self {
CoreError::DbError(msg.to_string())
}
pub fn comput_error(msg: &str) -> Self {
CoreError::ComputError(msg.to_string())
}
}