use loro_common::TreeID;
use rle::{HasLength, Mergable, Sliceable};
use serde::{Deserialize, Serialize};
use crate::state::TreeParentId;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
pub struct TreeOp {
pub(crate) target: TreeID,
pub(crate) parent: Option<TreeID>,
}
impl TreeOp {
pub(crate) fn parent_id(&self) -> TreeParentId {
match self.parent {
Some(parent) => {
if TreeID::is_deleted_root(&parent) {
TreeParentId::Deleted
} else {
TreeParentId::Node(parent)
}
}
None => TreeParentId::None,
}
}
}
impl HasLength for TreeOp {
fn content_len(&self) -> usize {
1
}
}
impl Sliceable for TreeOp {
fn slice(&self, from: usize, to: usize) -> Self {
assert!(from == 0 && to == 1);
*self
}
}
impl Mergable for TreeOp {}