use reifydb_type::value::datetime::DateTime;
use crate::{
common::CommitVersion,
interface::catalog::{flow::FlowNodeId, shape::ShapeId},
value::column::columns::Columns,
};
#[derive(Debug, Clone)]
pub enum ChangeOrigin {
Shape(ShapeId),
Flow(FlowNodeId),
}
#[derive(Debug, Clone)]
pub enum Diff {
Insert {
post: Columns,
},
Update {
pre: Columns,
post: Columns,
},
Remove {
pre: Columns,
},
}
#[derive(Debug, Clone)]
pub struct Change {
pub origin: ChangeOrigin,
pub diffs: Vec<Diff>,
pub version: CommitVersion,
pub changed_at: DateTime,
}
impl Change {
pub fn from_shape(shape: ShapeId, version: CommitVersion, diffs: Vec<Diff>, changed_at: DateTime) -> Self {
Self {
origin: ChangeOrigin::Shape(shape),
diffs,
version,
changed_at,
}
}
pub fn from_flow(from: FlowNodeId, version: CommitVersion, diffs: Vec<Diff>, changed_at: DateTime) -> Self {
Self {
origin: ChangeOrigin::Flow(from),
diffs,
version,
changed_at,
}
}
}