cdk_payment_processor/
error.rs

1//! Error for payment processor
2
3use thiserror::Error;
4use tonic::Status;
5
6/// CDK Payment processor error
7#[derive(Debug, Error)]
8pub enum Error {
9    /// Invalid ID
10    #[error("Invalid id")]
11    InvalidId,
12    /// Invalid payment identifier
13    #[error("Invalid payment identifier")]
14    InvalidPaymentIdentifier,
15    /// Invalid hash
16    #[error("Invalid hash")]
17    InvalidHash,
18    /// Invalid currency unit
19    #[error("Invalid currency unit: {0}")]
20    InvalidCurrencyUnit(String),
21    /// Parse invoice error
22    #[error(transparent)]
23    Invoice(#[from] lightning_invoice::ParseOrSemanticError),
24    /// Hex decode error
25    #[error(transparent)]
26    Hex(#[from] hex::FromHexError),
27    /// BOLT12 parse error
28    #[error("BOLT12 parse error")]
29    Bolt12Parse,
30    /// NUT00 Error
31    #[error(transparent)]
32    NUT00(#[from] cdk_common::nuts::nut00::Error),
33    /// NUT05 error
34    #[error(transparent)]
35    NUT05(#[from] cdk_common::nuts::nut05::Error),
36    /// Payment error
37    #[error(transparent)]
38    Payment(#[from] cdk_common::payment::Error),
39}
40
41impl From<Error> for Status {
42    fn from(error: Error) -> Self {
43        match error {
44            Error::InvalidId => Status::invalid_argument("Invalid ID"),
45            Error::InvalidPaymentIdentifier => {
46                Status::invalid_argument("Invalid payment identifier")
47            }
48            Error::InvalidHash => Status::invalid_argument("Invalid hash"),
49            Error::InvalidCurrencyUnit(unit) => {
50                Status::invalid_argument(format!("Invalid currency unit: {unit}"))
51            }
52            Error::Invoice(err) => Status::invalid_argument(format!("Invoice error: {err}")),
53            Error::Hex(err) => Status::invalid_argument(format!("Hex decode error: {err}")),
54            Error::Bolt12Parse => Status::invalid_argument("BOLT12 parse error"),
55            Error::NUT00(err) => Status::internal(format!("NUT00 error: {err}")),
56            Error::NUT05(err) => Status::internal(format!("NUT05 error: {err}")),
57            Error::Payment(err) => Status::internal(format!("Payment error: {err}")),
58        }
59    }
60}
61
62impl From<Error> for cdk_common::payment::Error {
63    fn from(error: Error) -> Self {
64        match error {
65            Error::InvalidId => Self::Custom("Invalid ID".to_string()),
66            Error::InvalidPaymentIdentifier => {
67                Self::Custom("Invalid payment identifier".to_string())
68            }
69            Error::InvalidHash => Self::Custom("Invalid hash".to_string()),
70            Error::InvalidCurrencyUnit(unit) => {
71                Self::Custom(format!("Invalid currency unit: {unit}"))
72            }
73            Error::Invoice(err) => Self::Custom(format!("Invoice error: {err}")),
74            Error::Hex(err) => Self::Custom(format!("Hex decode error: {err}")),
75            Error::Bolt12Parse => Self::Custom("BOLT12 parse error".to_string()),
76            Error::NUT00(err) => Self::Custom(format!("NUT00 error: {err}")),
77            Error::NUT05(err) => err.into(),
78            Error::Payment(err) => err,
79        }
80    }
81}