Skip to main content

cala_ledger/tx_template/
error.rs

1use rust_decimal::Decimal;
2use thiserror::Error;
3
4use cala_types::primitives::{Currency, Layer};
5use cel_interpreter::CelError;
6
7use super::repo::{
8    TxTemplateColumn, TxTemplateCreateError, TxTemplateFindError, TxTemplateModifyError,
9    TxTemplateQueryError,
10};
11
12#[derive(Error, Debug)]
13pub enum TxTemplateError {
14    #[error("TxTemplateError - Sqlx: {0}")]
15    Sqlx(#[from] sqlx::Error),
16    #[error("TxTemplateError - Create: {0}")]
17    Create(TxTemplateCreateError),
18    #[error("TxTemplateError - Modify: {0}")]
19    Modify(#[from] TxTemplateModifyError),
20    #[error("TxTemplateError - Find: {0}")]
21    Find(TxTemplateFindError),
22    #[error("TxTemplateError - Query: {0}")]
23    Query(#[from] TxTemplateQueryError),
24    #[error("TxTemplateError - DuplicateCode: code '{0}' already exists")]
25    DuplicateCode(String),
26    #[error("TxTemplateError - DuplicateId: id '{0}' already exists")]
27    DuplicateId(String),
28    #[error("TxTemplateError - CelError: {0}")]
29    CelError(#[from] CelError),
30    #[error("TxTemplateError - NotFound")]
31    NotFound,
32    #[error("TxTemplateError - SerdeJson: {0}")]
33    SerdeJson(#[from] serde_json::Error),
34    #[error("TxTemplateError - UnbalancedTransaction: currency {0}, layer {1:?}, amount {2}")]
35    UnbalancedTransaction(Currency, Layer, Decimal),
36    #[error("TxTemplateError - NotFound: code '{0}' not found")]
37    CouldNotFindByCode(String),
38    #[error("{0}")]
39    ParamError(#[from] crate::param::error::ParamError),
40}
41
42impl From<TxTemplateFindError> for TxTemplateError {
43    fn from(error: TxTemplateFindError) -> Self {
44        match error {
45            TxTemplateFindError::NotFound {
46                column: Some(TxTemplateColumn::Code),
47                value,
48                ..
49            } => Self::CouldNotFindByCode(value),
50            other => Self::Find(other),
51        }
52    }
53}
54
55impl From<TxTemplateCreateError> for TxTemplateError {
56    fn from(error: TxTemplateCreateError) -> Self {
57        match error {
58            TxTemplateCreateError::ConstraintViolation {
59                column: Some(TxTemplateColumn::Code),
60                value,
61                ..
62            } => Self::DuplicateCode(value.unwrap_or_default()),
63            TxTemplateCreateError::ConstraintViolation {
64                column: Some(TxTemplateColumn::Id),
65                value,
66                ..
67            } => Self::DuplicateId(value.unwrap_or_default()),
68            other => Self::Create(other),
69        }
70    }
71}