reifydb_core/interface/
change.rs1use reifydb_type::value::datetime::DateTime;
5
6use crate::{
7 common::CommitVersion,
8 interface::catalog::{flow::FlowNodeId, shape::ShapeId},
9 value::column::columns::Columns,
10};
11
12#[derive(Debug, Clone)]
14pub enum ChangeOrigin {
15 Shape(ShapeId),
16 Flow(FlowNodeId),
17}
18#[derive(Debug, Clone)]
20pub enum Diff {
21 Insert {
22 post: Columns,
23 },
24 Update {
25 pre: Columns,
26 post: Columns,
27 },
28 Remove {
29 pre: Columns,
30 },
31}
32
33#[derive(Debug, Clone)]
35pub struct Change {
36 pub origin: ChangeOrigin,
38 pub diffs: Vec<Diff>,
40 pub version: CommitVersion,
42 pub changed_at: DateTime,
44}
45
46impl Change {
47 pub fn from_shape(shape: ShapeId, version: CommitVersion, diffs: Vec<Diff>, changed_at: DateTime) -> Self {
49 Self {
50 origin: ChangeOrigin::Shape(shape),
51 diffs,
52 version,
53 changed_at,
54 }
55 }
56
57 pub fn from_flow(from: FlowNodeId, version: CommitVersion, diffs: Vec<Diff>, changed_at: DateTime) -> Self {
59 Self {
60 origin: ChangeOrigin::Flow(from),
61 diffs,
62 version,
63 changed_at,
64 }
65 }
66}