mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-12-28 07:33:45 +00:00
49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
use crate::{client_document::InitialDocumentText, errors::CollaborateError, synchronizer::RevisionSyncObject};
|
|
use lib_ot::{
|
|
core::*,
|
|
rich_text::{RichTextAttributes, RichTextDelta},
|
|
};
|
|
|
|
pub struct ServerDocument {
|
|
doc_id: String,
|
|
delta: RichTextDelta,
|
|
}
|
|
|
|
impl ServerDocument {
|
|
#[allow(dead_code)]
|
|
pub fn new<C: InitialDocumentText>(doc_id: &str) -> Self {
|
|
Self::from_delta(doc_id, C::initial_delta())
|
|
}
|
|
|
|
pub fn from_delta(doc_id: &str, delta: RichTextDelta) -> Self {
|
|
let doc_id = doc_id.to_owned();
|
|
ServerDocument { doc_id, delta }
|
|
}
|
|
}
|
|
|
|
impl RevisionSyncObject<RichTextAttributes> for ServerDocument {
|
|
fn id(&self) -> &str {
|
|
&self.doc_id
|
|
}
|
|
|
|
fn compose(&mut self, other: &RichTextDelta) -> Result<(), CollaborateError> {
|
|
// tracing::trace!("{} compose {}", &self.delta.to_json(), other.to_json());
|
|
let new_delta = self.delta.compose(other)?;
|
|
self.delta = new_delta;
|
|
Ok(())
|
|
}
|
|
|
|
fn transform(&self, other: &RichTextDelta) -> Result<(RichTextDelta, RichTextDelta), CollaborateError> {
|
|
let value = self.delta.transform(other)?;
|
|
Ok(value)
|
|
}
|
|
|
|
fn to_json(&self) -> String {
|
|
self.delta.to_json_str()
|
|
}
|
|
|
|
fn set_delta(&mut self, new_delta: Delta<RichTextAttributes>) {
|
|
self.delta = new_delta;
|
|
}
|
|
}
|