error.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. use serde_json::Value;
  2. use darkfi::rpc::jsonrpc::{error as jsonerr, response as jsonresp, ErrorCode, 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. }
  16. pub type TaudResult<T> = std::result::Result<T, TaudError>;
  17. impl From<serde_json::Error> for TaudError {
  18. fn from(err: serde_json::Error) -> TaudError {
  19. TaudError::SerdeJsonError(err.to_string())
  20. }
  21. }
  22. pub fn to_json_result(res: TaudResult<Value>, id: Value) -> JsonResult {
  23. match res {
  24. Ok(v) => JsonResult::Resp(jsonresp(v, id)),
  25. Err(err) => match err {
  26. TaudError::InvalidId => JsonResult::Err(jsonerr(
  27. ErrorCode::InvalidParams,
  28. Some("invalid task's id".into()),
  29. id,
  30. )),
  31. TaudError::InvalidData(e) | TaudError::SerdeJsonError(e) => {
  32. JsonResult::Err(jsonerr(ErrorCode::InvalidParams, Some(e), id))
  33. }
  34. TaudError::InvalidDueTime => JsonResult::Err(jsonerr(
  35. ErrorCode::InvalidParams,
  36. Some("invalid due time".into()),
  37. id,
  38. )),
  39. TaudError::Darkfi(e) => {
  40. JsonResult::Err(jsonerr(ErrorCode::InternalError, Some(e.to_string()), id))
  41. }
  42. },
  43. }
  44. }