cdk_payment_processor/
error.rs1use thiserror::Error;
4use tonic::Status;
5
6#[derive(Debug, Error)]
8pub enum Error {
9 #[error("Invalid id")]
11 InvalidId,
12 #[error("Invalid payment identifier")]
14 InvalidPaymentIdentifier,
15 #[error("Invalid hash")]
17 InvalidHash,
18 #[error("Invalid currency unit: {0}")]
20 InvalidCurrencyUnit(String),
21 #[error(transparent)]
23 Invoice(#[from] lightning_invoice::ParseOrSemanticError),
24 #[error(transparent)]
26 Hex(#[from] hex::FromHexError),
27 #[error("BOLT12 parse error")]
29 Bolt12Parse,
30 #[error(transparent)]
32 NUT00(#[from] cdk_common::nuts::nut00::Error),
33 #[error(transparent)]
35 NUT05(#[from] cdk_common::nuts::nut05::Error),
36 #[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}