error.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. use serde_json::Value;
  2. use darkfi::rpc::jsonrpc::{ErrorCode, JsonError, JsonResponse, JsonResult};
  3. #[derive(Debug, thiserror::Error)]
  4. pub enum TaudError {
  5. #[error("Due timestamp invalid")]
  6. InvalidDueTime,
  7. #[error("Invalid Id")]
  8. InvalidId,
  9. #[error("Invalid Data/Params: `{0}` ")]
  10. InvalidData(String),
  11. #[error("InternalError")]
  12. Darkfi(#[from] darkfi::error::Error),
  13. #[error("Json serialization error: `{0}`")]
  14. SerdeJsonError(String),
  15. #[error("Encryption error: `{0}`")]
  16. EncryptionError(String),
  17. }
  18. pub type TaudResult<T> = std::result::Result<T, TaudError>;
  19. impl From<serde_json::Error> for TaudError {
  20. fn from(err: serde_json::Error) -> TaudError {
  21. TaudError::SerdeJsonError(err.to_string())
  22. }
  23. }
  24. impl From<crypto_box::aead::Error> for TaudError {
  25. fn from(err: crypto_box::aead::Error) -> TaudError {
  26. TaudError::EncryptionError(err.to_string())
  27. }
  28. }
  29. pub fn to_json_result(res: TaudResult<Value>, id: Value) -> JsonResult {
  30. match res {
  31. Ok(v) => JsonResponse::new(v, id).into(),
  32. Err(err) => match err {
  33. TaudError::InvalidId => {
  34. JsonError::new(ErrorCode::InvalidParams, Some("invalid task id".into()), id).into()
  35. }
  36. TaudError::InvalidData(e) | TaudError::SerdeJsonError(e) => {
  37. JsonError::new(ErrorCode::InvalidParams, Some(e), id).into()
  38. }
  39. TaudError::InvalidDueTime => {
  40. JsonError::new(ErrorCode::InvalidParams, Some("invalid due time".into()), id).into()
  41. }
  42. TaudError::EncryptionError(e) => {
  43. JsonError::new(ErrorCode::InternalError, Some(e), id).into()
  44. }
  45. TaudError::Darkfi(e) => {
  46. JsonError::new(ErrorCode::InternalError, Some(e.to_string()), id).into()
  47. }
  48. },
  49. }
  50. }