summaryrefslogtreecommitdiff
path: root/crdt/src/doc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crdt/src/doc.rs')
-rw-r--r--crdt/src/doc.rs114
1 files changed, 0 insertions, 114 deletions
diff --git a/crdt/src/doc.rs b/crdt/src/doc.rs
deleted file mode 100644
index fcca1d8..0000000
--- a/crdt/src/doc.rs
+++ /dev/null
@@ -1,114 +0,0 @@
-use serde::{Deserialize, Serialize};
-use thiserror::Error;
-use uuid::Uuid;
-
-use crate::op::{ChangeSubdivisions, CreateGrid, Op, OpKind};
-
-/// An deterministically derived ID, e.g. a grid ID derived from the
-/// op ID which creates it.
-pub struct DerivedId {
- base: String,
- tag: &'static str,
- index: usize,
-}
-
-impl ToString for DerivedId {
- fn to_string(&self) -> String {
- format!("{}:{}={}", self.base, self.tag, self.index)
- }
-}
-
-trait DerivableId {
- fn derive_id(&self, tag: &'static str, index: usize) -> DerivedId;
-}
-
-impl DerivableId for Uuid {
- fn derive_id(&self, tag: &'static str, index: usize) -> DerivedId {
- DerivedId {
- base: self.to_string(),
- tag,
- index,
- }
- }
-}
-
-impl DerivableId for DerivedId {
- fn derive_id(&self, tag: &'static str, index: usize) -> DerivedId {
- DerivedId {
- base: self.to_string(),
- tag,
- index,
- }
- }
-}
-
-impl Serialize for DerivedId {
- fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
- where
- S: serde::Serializer,
- {
- serializer.serialize_str(&self.to_string())
- }
-}
-
-#[derive(Default, Serialize)]
-pub struct Doc {
- pub(crate) grids: Vec<Grid>,
-}
-
-#[derive(Serialize)]
-pub struct Grid {
- pub(crate) id: DerivedId,
- pub(crate) rows: Vec<Row>,
-}
-
-#[derive(Serialize)]
-pub struct Row {
- pub(crate) id: DerivedId,
- pub(crate) cells: Vec<Cell>,
-}
-
-#[derive(Serialize)]
-pub struct Cell {
- pub(crate) id: DerivedId,
-}
-
-#[derive(Error, Debug)]
-pub enum ApplyOpError {}
-
-pub type ApplyOpResult = Result<(), ApplyOpError>;
-
-impl Doc {
- pub fn apply_op(&mut self, op: &Op) -> ApplyOpResult {
- match &op.kind {
- OpKind::CreateGrid(data) => apply_create_grid(self, &op.id, data),
- OpKind::ChangeSubdivisions(data) => apply_change_subdivisions(self, data),
- }
- }
-}
-
-fn apply_create_grid(doc: &mut Doc, op_id: &Uuid, data: &CreateGrid) -> ApplyOpResult {
- let grid_id = op_id.derive_id("grid", 0);
-
- let rows = (0..data.rows)
- .map(|row_idx| {
- let row_id = grid_id.derive_id("row", row_idx);
-
- let cells = (0..data.base_cells_per_row)
- .map(|cell_idx| Cell {
- id: row_id.derive_id("cell", cell_idx),
- })
- .collect();
-
- Row { id: row_id, cells }
- })
- .collect();
-
- doc.grids.push(Grid { id: grid_id, rows });
-
- Ok(())
-}
-
-fn apply_change_subdivisions(doc: &mut Doc, data: &ChangeSubdivisions) -> ApplyOpResult {
- todo!()
-}