Skip to content

Commit ef65551

Browse files
committed
feat: add serialize/deserialize
1 parent b0bafff commit ef65551

File tree

4 files changed

+58
-5
lines changed

4 files changed

+58
-5
lines changed

shared-lib/lib-ot/src/core/document/attributes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::collections::HashMap;
22

3-
#[derive(Clone)]
3+
#[derive(Clone, serde::Serialize, serde::Deserialize)]
44
pub struct NodeAttributes(pub HashMap<String, Option<String>>);
55

66
impl NodeAttributes {

shared-lib/lib-ot/src/core/document/document_operation.rs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::core::document::position::Position;
22
use crate::core::{NodeAttributes, NodeData, TextDelta};
33

4-
#[derive(Clone)]
4+
#[derive(Clone, serde::Serialize, serde::Deserialize)]
55
pub enum DocumentOperation {
66
Insert {
77
path: Position,
@@ -98,3 +98,56 @@ impl DocumentOperation {
9898
}
9999
}
100100
}
101+
102+
#[cfg(test)]
103+
mod tests {
104+
use crate::core::Position;
105+
106+
#[test]
107+
fn test_transform_path_1() {
108+
assert_eq!(
109+
{ Position::transform(&Position(vec![0, 1]), &Position(vec![0, 1]), 1) }.0,
110+
vec![0, 2]
111+
);
112+
}
113+
114+
#[test]
115+
fn test_transform_path_2() {
116+
assert_eq!(
117+
{ Position::transform(&Position(vec![0, 1]), &Position(vec![0, 2]), 1) }.0,
118+
vec![0, 3]
119+
);
120+
}
121+
122+
#[test]
123+
fn test_transform_path_3() {
124+
assert_eq!(
125+
{ Position::transform(&Position(vec![0, 1]), &Position(vec![0, 2, 7, 8, 9]), 1) }.0,
126+
vec![0, 3, 7, 8, 9]
127+
);
128+
}
129+
130+
#[test]
131+
fn test_transform_path_not_changed() {
132+
assert_eq!(
133+
{ Position::transform(&Position(vec![0, 1, 2]), &Position(vec![0, 0, 7, 8, 9]), 1) }.0,
134+
vec![0, 0, 7, 8, 9]
135+
);
136+
assert_eq!(
137+
{ Position::transform(&Position(vec![0, 1, 2]), &Position(vec![0, 1]), 1) }.0,
138+
vec![0, 1]
139+
);
140+
assert_eq!(
141+
{ Position::transform(&Position(vec![1, 1]), &Position(vec![1, 0]), 1) }.0,
142+
vec![1, 0]
143+
);
144+
}
145+
146+
#[test]
147+
fn test_transform_delta() {
148+
assert_eq!(
149+
{ Position::transform(&Position(vec![0, 1]), &Position(vec![0, 1]), 5) }.0,
150+
vec![0, 6]
151+
);
152+
}
153+
}

shared-lib/lib-ot/src/core/document/node.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::core::{NodeAttributes, TextDelta};
22

3-
#[derive(Clone)]
3+
#[derive(Clone, serde::Serialize, serde::Deserialize)]
44
pub struct NodeData {
55
pub node_type: String,
66
pub attributes: NodeAttributes,

shared-lib/lib-ot/src/core/document/position.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#[derive(Clone)]
1+
#[derive(Clone, serde::Serialize, serde::Deserialize)]
22
pub struct Position(pub Vec<usize>);
33

44
impl Position {
@@ -20,7 +20,7 @@ impl Position {
2020
return b.clone();
2121
}
2222
// check the prefix
23-
for i in 0..(pre_insert_path.len()) {
23+
for i in 0..(pre_insert_path.len() - 1) {
2424
if pre_insert_path.0[i] != b.0[i] {
2525
return b.clone();
2626
}

0 commit comments

Comments
 (0)