errors.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. use bytes::Bytes;
  2. use derive_more::Display;
  3. use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
  4. use flowy_dispatch::prelude::{EventResponse, ResponseBuilder};
  5. use std::convert::TryInto;
  6. #[derive(Debug, Default, Clone, ProtoBuf)]
  7. pub struct WorkspaceError {
  8. #[pb(index = 1)]
  9. pub code: WsErrCode,
  10. #[pb(index = 2)]
  11. pub msg: String,
  12. }
  13. impl WorkspaceError {
  14. pub fn new(code: WsErrCode, msg: &str) -> Self {
  15. Self {
  16. code,
  17. msg: msg.to_owned(),
  18. }
  19. }
  20. }
  21. #[derive(Debug, Clone, ProtoBuf_Enum, Display, PartialEq, Eq)]
  22. pub enum WsErrCode {
  23. #[display(fmt = "Unknown")]
  24. Unknown = 0,
  25. #[display(fmt = "Workspace name is invalid")]
  26. WorkspaceNameInvalid = 1,
  27. #[display(fmt = "Workspace id is invalid")]
  28. WorkspaceIdInvalid = 2,
  29. #[display(fmt = "Color style of the App is invalid")]
  30. AppColorStyleInvalid = 3,
  31. #[display(fmt = "Id of the App is invalid")]
  32. AppIdInvalid = 10,
  33. #[display(fmt = "Name of the App is invalid")]
  34. AppNameInvalid = 11,
  35. #[display(fmt = "Name of the View is invalid")]
  36. ViewNameInvalid = 20,
  37. #[display(fmt = "Thumbnail of the view is invalid")]
  38. ViewThumbnailInvalid = 21,
  39. #[display(fmt = "Id of the View is invalid")]
  40. ViewIdInvalid = 22,
  41. #[display(fmt = "Description of the View is invalid")]
  42. ViewDescInvalid = 23,
  43. #[display(fmt = "Get database connection failed")]
  44. DatabaseConnectionFail = 100,
  45. #[display(fmt = "Database internal error")]
  46. WorkspaceDatabaseError = 101,
  47. #[display(fmt = "User internal error")]
  48. UserInternalError = 102,
  49. #[display(fmt = "User not login yet")]
  50. UserNotLoginYet = 103,
  51. }
  52. impl std::default::Default for WsErrCode {
  53. fn default() -> Self { WsErrCode::Unknown }
  54. }
  55. impl std::convert::From<flowy_database::result::Error> for WorkspaceError {
  56. fn from(error: flowy_database::result::Error) -> Self {
  57. ErrorBuilder::new(WsErrCode::WorkspaceDatabaseError)
  58. .error(error)
  59. .build()
  60. }
  61. }
  62. impl flowy_dispatch::Error for WorkspaceError {
  63. fn as_response(&self) -> EventResponse {
  64. let bytes: Bytes = self.clone().try_into().unwrap();
  65. ResponseBuilder::Err().data(bytes).build()
  66. }
  67. }
  68. pub type ErrorBuilder = flowy_infra::errors::Builder<WsErrCode, WorkspaceError>;
  69. impl flowy_infra::errors::Build<WsErrCode> for WorkspaceError {
  70. fn build(code: WsErrCode, msg: String) -> Self { WorkspaceError::new(code, &msg) }
  71. }