folder_pad.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use crate::{entities::folder::FolderDelta, errors::CollaborateError, synchronizer::RevisionSyncObject};
  2. use lib_ot::core::{OperationTransform, PhantomAttributes, TextDelta};
  3. pub struct ServerFolder {
  4. folder_id: String,
  5. delta: FolderDelta,
  6. }
  7. impl ServerFolder {
  8. pub fn from_delta(folder_id: &str, delta: FolderDelta) -> Self {
  9. Self {
  10. folder_id: folder_id.to_owned(),
  11. delta,
  12. }
  13. }
  14. }
  15. impl RevisionSyncObject<PhantomAttributes> for ServerFolder {
  16. fn id(&self) -> &str {
  17. &self.folder_id
  18. }
  19. fn compose(&mut self, other: &TextDelta) -> Result<(), CollaborateError> {
  20. let new_delta = self.delta.compose(other)?;
  21. self.delta = new_delta;
  22. Ok(())
  23. }
  24. fn transform(&self, other: &TextDelta) -> Result<(TextDelta, TextDelta), CollaborateError> {
  25. let value = self.delta.transform(other)?;
  26. Ok(value)
  27. }
  28. fn to_json(&self) -> String {
  29. self.delta.to_json_str()
  30. }
  31. fn set_delta(&mut self, new_delta: TextDelta) {
  32. self.delta = new_delta;
  33. }
  34. }