scuriolus 0.3.0

Scuriolus is a modular trading bot platform.
Documentation
use thiserror::Error;

use crate::generics::order::OrderError;

pub type CoreResult<T> = std::result::Result<T, CoreError>;

/// [`super::Core`] manipulation errors
#[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())
    }
}