error.rs 3.0 KB

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