use serde::{Deserialize, Serialize};
use std::cmp::{Eq, PartialEq};
use super::{Clock, OpMove, TreeId, TreeMeta, TreeNode};
use crdts::Actor;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LogOpMove<ID: TreeId, TM: TreeMeta, A: Actor> {
op: OpMove<ID, TM, A>,
oldp: Option<TreeNode<ID, TM>>,
}
impl<ID: TreeId, TM: TreeMeta, A: Actor> LogOpMove<ID, TM, A> {
pub fn new(op: OpMove<ID, TM, A>, oldp: Option<TreeNode<ID, TM>>) -> LogOpMove<ID, TM, A> {
LogOpMove { op, oldp }
}
#[inline]
pub fn timestamp(&self) -> &Clock<A> {
self.op.timestamp()
}
#[inline]
pub fn parent_id(&self) -> &ID {
self.op.parent_id()
}
#[inline]
pub fn metadata(&self) -> &TM {
self.op.metadata()
}
#[inline]
pub fn child_id(&self) -> &ID {
self.op.child_id()
}
#[inline]
pub fn oldp(&self) -> &Option<TreeNode<ID, TM>> {
&self.oldp
}
#[inline]
pub fn op_into(self) -> OpMove<ID, TM, A> {
self.op
}
}