workspace.rs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. use std::convert::TryInto;
  2. use collab::core::collab_state::SyncState;
  3. use collab_folder::core::Workspace;
  4. use flowy_derive::ProtoBuf;
  5. use flowy_error::ErrorCode;
  6. use crate::{
  7. entities::parser::workspace::{WorkspaceDesc, WorkspaceIdentify, WorkspaceName},
  8. entities::view::ViewPB,
  9. };
  10. #[derive(Eq, PartialEq, ProtoBuf, Default, Debug, Clone)]
  11. pub struct WorkspacePB {
  12. #[pb(index = 1)]
  13. pub id: String,
  14. #[pb(index = 2)]
  15. pub name: String,
  16. #[pb(index = 3)]
  17. pub views: Vec<ViewPB>,
  18. #[pb(index = 4)]
  19. pub create_time: i64,
  20. }
  21. impl std::convert::From<(Workspace, Vec<ViewPB>)> for WorkspacePB {
  22. fn from(params: (Workspace, Vec<ViewPB>)) -> Self {
  23. let (workspace, views) = params;
  24. WorkspacePB {
  25. id: workspace.id,
  26. name: workspace.name,
  27. views,
  28. create_time: workspace.created_at,
  29. }
  30. }
  31. }
  32. impl std::convert::From<Workspace> for WorkspacePB {
  33. fn from(workspace: Workspace) -> Self {
  34. WorkspacePB {
  35. id: workspace.id,
  36. name: workspace.name,
  37. views: Default::default(),
  38. create_time: workspace.created_at,
  39. }
  40. }
  41. }
  42. #[derive(PartialEq, Eq, Debug, Default, ProtoBuf)]
  43. pub struct RepeatedWorkspacePB {
  44. #[pb(index = 1)]
  45. pub items: Vec<WorkspacePB>,
  46. }
  47. impl From<Vec<Workspace>> for RepeatedWorkspacePB {
  48. fn from(workspaces: Vec<Workspace>) -> Self {
  49. Self {
  50. items: workspaces
  51. .into_iter()
  52. .map(|workspace| workspace.into())
  53. .collect::<Vec<WorkspacePB>>(),
  54. }
  55. }
  56. }
  57. #[derive(ProtoBuf, Default)]
  58. pub struct CreateWorkspacePayloadPB {
  59. #[pb(index = 1)]
  60. pub name: String,
  61. #[pb(index = 2)]
  62. pub desc: String,
  63. }
  64. #[derive(Clone, Debug)]
  65. pub struct CreateWorkspaceParams {
  66. pub name: String,
  67. pub desc: String,
  68. }
  69. impl TryInto<CreateWorkspaceParams> for CreateWorkspacePayloadPB {
  70. type Error = ErrorCode;
  71. fn try_into(self) -> Result<CreateWorkspaceParams, Self::Error> {
  72. let name = WorkspaceName::parse(self.name)?;
  73. let desc = WorkspaceDesc::parse(self.desc)?;
  74. Ok(CreateWorkspaceParams {
  75. name: name.0,
  76. desc: desc.0,
  77. })
  78. }
  79. }
  80. // Read all workspaces if the workspace_id is None
  81. #[derive(Clone, ProtoBuf, Default, Debug)]
  82. pub struct WorkspaceIdPB {
  83. #[pb(index = 1, one_of)]
  84. pub value: Option<String>,
  85. }
  86. impl WorkspaceIdPB {
  87. pub fn new(workspace_id: Option<String>) -> Self {
  88. Self {
  89. value: workspace_id,
  90. }
  91. }
  92. }
  93. #[derive(Default, ProtoBuf, Debug, Clone)]
  94. pub struct WorkspaceSettingPB {
  95. #[pb(index = 1)]
  96. pub workspace: WorkspacePB,
  97. #[pb(index = 2, one_of)]
  98. pub latest_view: Option<ViewPB>,
  99. }
  100. #[derive(ProtoBuf, Default)]
  101. pub struct UpdateWorkspacePayloadPB {
  102. #[pb(index = 1)]
  103. pub id: String,
  104. #[pb(index = 2, one_of)]
  105. pub name: Option<String>,
  106. #[pb(index = 3, one_of)]
  107. pub desc: Option<String>,
  108. }
  109. #[derive(Clone, Debug)]
  110. pub struct UpdateWorkspaceParams {
  111. pub id: String,
  112. pub name: Option<String>,
  113. pub desc: Option<String>,
  114. }
  115. impl TryInto<UpdateWorkspaceParams> for UpdateWorkspacePayloadPB {
  116. type Error = ErrorCode;
  117. fn try_into(self) -> Result<UpdateWorkspaceParams, Self::Error> {
  118. let name = match self.name {
  119. None => None,
  120. Some(name) => Some(WorkspaceName::parse(name)?.0),
  121. };
  122. let id = WorkspaceIdentify::parse(self.id)?;
  123. Ok(UpdateWorkspaceParams {
  124. id: id.0,
  125. name,
  126. desc: self.desc,
  127. })
  128. }
  129. }
  130. #[derive(Debug, Default, ProtoBuf)]
  131. pub struct RepeatedFolderSnapshotPB {
  132. #[pb(index = 1)]
  133. pub items: Vec<FolderSnapshotPB>,
  134. }
  135. #[derive(Debug, Default, ProtoBuf)]
  136. pub struct FolderSnapshotPB {
  137. #[pb(index = 1)]
  138. pub snapshot_id: i64,
  139. #[pb(index = 2)]
  140. pub snapshot_desc: String,
  141. #[pb(index = 3)]
  142. pub created_at: i64,
  143. #[pb(index = 4)]
  144. pub data: Vec<u8>,
  145. }
  146. #[derive(Debug, Default, ProtoBuf)]
  147. pub struct FolderSnapshotStatePB {
  148. #[pb(index = 1)]
  149. pub new_snapshot_id: i64,
  150. }
  151. #[derive(Debug, Default, ProtoBuf)]
  152. pub struct FolderSyncStatePB {
  153. #[pb(index = 1)]
  154. pub is_syncing: bool,
  155. #[pb(index = 2)]
  156. pub is_finish: bool,
  157. }
  158. impl From<SyncState> for FolderSyncStatePB {
  159. fn from(value: SyncState) -> Self {
  160. Self {
  161. is_syncing: value.is_syncing(),
  162. is_finish: value.is_sync_finished(),
  163. }
  164. }
  165. }
  166. #[derive(ProtoBuf, Default)]
  167. pub struct UserFolderPB {
  168. #[pb(index = 1)]
  169. pub uid: i64,
  170. #[pb(index = 2)]
  171. pub workspace_id: String,
  172. }