error.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. }
  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) => JsonResponse::new(v, id).into(),
  25. Err(err) => match err {
  26. TaudError::InvalidId => {
  27. JsonError::new(ErrorCode::InvalidParams, Some("invalid task id".into()), id).into()
  28. }
  29. TaudError::InvalidData(e) | TaudError::SerdeJsonError(e) => {
  30. JsonError::new(ErrorCode::InvalidParams, Some(e), id).into()
  31. }
  32. TaudError::InvalidDueTime => {
  33. JsonError::new(ErrorCode::InvalidParams, Some("invalid due time".into()), id).into()
  34. }
  35. TaudError::Darkfi(e) => {
  36. JsonError::new(ErrorCode::InternalError, Some(e.to_string()), id).into()
  37. }
  38. },
  39. }
  40. }