Skip to main content

reifydb_core/interface/
change.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4use crate::{
5	common::CommitVersion,
6	interface::catalog::{flow::FlowNodeId, primitive::PrimitiveId},
7	value::column::columns::Columns,
8};
9
10/// Origin of a change
11#[derive(Debug, Clone)]
12pub enum ChangeOrigin {
13	Primitive(PrimitiveId),
14	Flow(FlowNodeId),
15}
16/// Represents a single diff
17#[derive(Debug, Clone)]
18pub enum Diff {
19	Insert {
20		post: Columns,
21	},
22	Update {
23		pre: Columns,
24		post: Columns,
25	},
26	Remove {
27		pre: Columns,
28	},
29}
30
31/// A change with origin, diffs, and version
32#[derive(Debug, Clone)]
33pub struct Change {
34	/// Origin of this change
35	pub origin: ChangeOrigin,
36	/// The list of diffs (changes)
37	pub diffs: Vec<Diff>,
38	/// Version of this change
39	pub version: CommitVersion,
40}
41
42impl Change {
43	/// Create a change from a primitive (external) source
44	pub fn from_primitive(source: PrimitiveId, version: CommitVersion, diffs: Vec<Diff>) -> Self {
45		Self {
46			origin: ChangeOrigin::Primitive(source),
47			diffs,
48			version,
49		}
50	}
51
52	/// Create a change from a flow node (internal)
53	pub fn from_flow(from: FlowNodeId, version: CommitVersion, diffs: Vec<Diff>) -> Self {
54		Self {
55			origin: ChangeOrigin::Flow(from),
56			diffs,
57			version,
58		}
59	}
60}