builder.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. use crate::entities::folder::FolderDelta;
  2. use crate::util::make_text_delta_from_revisions;
  3. use crate::{
  4. client_folder::{default_folder_delta, FolderPad},
  5. entities::revision::Revision,
  6. errors::CollaborateResult,
  7. };
  8. use flowy_folder_data_model::revision::{TrashRevision, WorkspaceRevision};
  9. use serde::{Deserialize, Serialize};
  10. #[derive(Serialize, Deserialize)]
  11. pub(crate) struct FolderPadBuilder {
  12. workspaces: Vec<WorkspaceRevision>,
  13. trash: Vec<TrashRevision>,
  14. }
  15. impl FolderPadBuilder {
  16. pub(crate) fn new() -> Self {
  17. Self {
  18. workspaces: vec![],
  19. trash: vec![],
  20. }
  21. }
  22. #[allow(dead_code)]
  23. pub(crate) fn with_workspace(mut self, workspaces: Vec<WorkspaceRevision>) -> Self {
  24. self.workspaces = workspaces;
  25. self
  26. }
  27. #[allow(dead_code)]
  28. pub(crate) fn with_trash(mut self, trash: Vec<TrashRevision>) -> Self {
  29. self.trash = trash;
  30. self
  31. }
  32. pub(crate) fn build_with_revisions(self, revisions: Vec<Revision>) -> CollaborateResult<FolderPad> {
  33. let mut folder_delta: FolderDelta = make_text_delta_from_revisions(revisions)?;
  34. if folder_delta.is_empty() {
  35. folder_delta = default_folder_delta();
  36. }
  37. FolderPad::from_delta(folder_delta)
  38. }
  39. #[allow(dead_code)]
  40. pub(crate) fn build(self) -> CollaborateResult<FolderPad> {
  41. FolderPad::new(self.workspaces, self.trash)
  42. }
  43. }