Skip to main content

bullet_exchange_interface/
error.rs

1use serde::Serialize;
2use thiserror::Error;
3
4#[derive(Debug, Error, Serialize)]
5#[serde(tag = "code", rename_all = "snake_case")]
6pub enum ConfigError {
7    #[error("Failed to parse input: {input} - {reason}")]
8    FailedToParseInput { input: String, reason: String },
9}
10
11/// Arithmetic operation errors with detailed context
12#[derive(Debug, Error, Serialize)]
13#[serde(tag = "code", rename_all = "snake_case")]
14pub enum ArithmeticError {
15    #[error("Decimal arithmetic failed: {operation} with {left} and {right}")]
16    DecimalFailed {
17        operation: ArithmeticOperation,
18        left: rust_decimal::Decimal,
19        right: rust_decimal::Decimal,
20    },
21
22    #[error("Integer arithmetic failed: {operation} with {left} and {right}")]
23    IntegerFailed {
24        operation: ArithmeticOperation,
25        left: i128,
26        right: i128,
27    },
28}
29
30/// Types of arithmetic operations
31#[derive(Debug, Clone, PartialEq, Serialize)]
32#[serde(rename_all = "snake_case")]
33pub enum ArithmeticOperation {
34    Addition,
35    Subtraction,
36    Multiplication,
37    Division,
38    Exponentiation,
39}
40
41impl std::fmt::Display for ArithmeticOperation {
42    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
43        match self {
44            Self::Addition => write!(fmt, "Addition"),
45            Self::Subtraction => write!(fmt, "Subtraction"),
46            Self::Multiplication => write!(fmt, "Multiplication"),
47            Self::Division => write!(fmt, "Division"),
48            Self::Exponentiation => write!(fmt, "Exponentiation"),
49        }
50    }
51}