error.rs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //! FFI Error types
  2. use cdk::Error as CdkError;
  3. /// FFI Error type that wraps CDK errors for cross-language use
  4. #[derive(Debug, thiserror::Error, uniffi::Error)]
  5. #[uniffi(flat_error)]
  6. pub enum FfiError {
  7. /// Generic error with message
  8. #[error("CDK Error: {msg}")]
  9. Generic { msg: String },
  10. /// Amount overflow
  11. #[error("Amount overflow")]
  12. AmountOverflow,
  13. /// Division by zero
  14. #[error("Division by zero")]
  15. DivisionByZero,
  16. /// Amount error
  17. #[error("Amount error: {msg}")]
  18. Amount { msg: String },
  19. /// Payment failed
  20. #[error("Payment failed")]
  21. PaymentFailed,
  22. /// Payment pending
  23. #[error("Payment pending")]
  24. PaymentPending,
  25. /// Insufficient funds
  26. #[error("Insufficient funds")]
  27. InsufficientFunds,
  28. /// Database error
  29. #[error("Database error: {msg}")]
  30. Database { msg: String },
  31. /// Network error
  32. #[error("Network error: {msg}")]
  33. Network { msg: String },
  34. /// Invalid token
  35. #[error("Invalid token: {msg}")]
  36. InvalidToken { msg: String },
  37. /// Wallet error
  38. #[error("Wallet error: {msg}")]
  39. Wallet { msg: String },
  40. /// Keyset unknown
  41. #[error("Keyset unknown")]
  42. KeysetUnknown,
  43. /// Unit not supported
  44. #[error("Unit not supported")]
  45. UnitNotSupported,
  46. /// Runtime task join error
  47. #[error("Runtime task join error: {msg}")]
  48. RuntimeTaskJoin { msg: String },
  49. /// Invalid mnemonic phrase
  50. #[error("Invalid mnemonic: {msg}")]
  51. InvalidMnemonic { msg: String },
  52. /// URL parsing error
  53. #[error("Invalid URL: {msg}")]
  54. InvalidUrl { msg: String },
  55. /// Hex format error
  56. #[error("Invalid hex format: {msg}")]
  57. InvalidHex { msg: String },
  58. /// Cryptographic key parsing error
  59. #[error("Invalid cryptographic key: {msg}")]
  60. InvalidCryptographicKey { msg: String },
  61. /// Serialization/deserialization error
  62. #[error("Serialization error: {msg}")]
  63. Serialization { msg: String },
  64. }
  65. impl From<CdkError> for FfiError {
  66. fn from(err: CdkError) -> Self {
  67. match err {
  68. CdkError::AmountOverflow => FfiError::AmountOverflow,
  69. CdkError::PaymentFailed => FfiError::PaymentFailed,
  70. CdkError::PaymentPending => FfiError::PaymentPending,
  71. CdkError::InsufficientFunds => FfiError::InsufficientFunds,
  72. CdkError::UnsupportedUnit => FfiError::UnitNotSupported,
  73. CdkError::KeysetUnknown(_) => FfiError::KeysetUnknown,
  74. _ => FfiError::Generic {
  75. msg: err.to_string(),
  76. },
  77. }
  78. }
  79. }
  80. impl From<cdk::amount::Error> for FfiError {
  81. fn from(err: cdk::amount::Error) -> Self {
  82. FfiError::Amount {
  83. msg: err.to_string(),
  84. }
  85. }
  86. }
  87. impl From<cdk::nuts::nut00::Error> for FfiError {
  88. fn from(err: cdk::nuts::nut00::Error) -> Self {
  89. FfiError::Generic {
  90. msg: err.to_string(),
  91. }
  92. }
  93. }
  94. impl From<serde_json::Error> for FfiError {
  95. fn from(err: serde_json::Error) -> Self {
  96. FfiError::Serialization {
  97. msg: err.to_string(),
  98. }
  99. }
  100. }