reifydb_flow_operator_sdk/
lib.rs1use std::collections::HashMap;
4
5use reifydb_core::{
6 CommitVersion, Row,
7 interface::{FlowNodeId, SourceId},
8};
9use reifydb_type::{RowNumber, Value};
10
11pub mod change;
12pub mod context;
13pub mod error;
14pub mod ffi;
15pub mod marshal;
16pub mod stateful;
17pub mod testing;
18
19pub use change::FlowChangeBuilder;
20pub use context::OperatorContext;
21pub use error::{FFIError, Result};
22pub use reifydb_core::{
23 CowVec,
24 key::EncodableKey,
25 value::encoded::{EncodedKey, EncodedValues},
26};
27pub use stateful::State;
28
29#[derive(Debug, Clone)]
31pub enum FlowChangeOrigin {
32 External(SourceId),
34 Internal(FlowNodeId),
36}
37
38#[derive(Debug, Clone)]
40pub enum FlowDiff {
41 Insert {
43 post: Row,
45 },
46 Update {
48 pre: Row,
50 post: Row,
52 },
53 Remove {
55 pre: Row,
57 },
58}
59
60#[derive(Debug, Clone)]
62pub struct FlowChange {
63 pub origin: FlowChangeOrigin,
65 pub diffs: Vec<FlowDiff>,
67 pub version: CommitVersion,
69}
70
71impl FlowChange {
72 pub fn external(source: SourceId, version: CommitVersion, diffs: Vec<FlowDiff>) -> Self {
74 Self {
75 origin: FlowChangeOrigin::External(source),
76 diffs,
77 version,
78 }
79 }
80
81 pub fn internal(from: FlowNodeId, version: CommitVersion, diffs: Vec<FlowDiff>) -> Self {
83 Self {
84 origin: FlowChangeOrigin::Internal(from),
85 diffs,
86 version,
87 }
88 }
89}
90
91pub trait FFIOperatorMetadata {
94 const NAME: &'static str;
96 const VERSION: u32;
98}
99
100pub trait FFIOperator: Send + Sync + 'static {
103 fn new(operator_id: FlowNodeId, config: &HashMap<String, Value>) -> Result<Self>
105 where
106 Self: Sized;
107
108 fn apply(&mut self, ctx: &mut OperatorContext, input: FlowChange) -> Result<FlowChange>;
110
111 fn get_rows(&mut self, ctx: &mut OperatorContext, row_numbers: &[RowNumber]) -> Result<Vec<Option<Row>>>;
113}
114
115pub trait FFIOperatorWithMetadata: FFIOperator + FFIOperatorMetadata {}
116impl<T> FFIOperatorWithMetadata for T where T: FFIOperator + FFIOperatorMetadata {}
117
118pub mod prelude {
120 pub use reifydb_core::{
121 CowVec, Row,
122 key::EncodableKey,
123 value::encoded::{EncodedKey, EncodedValues},
124 };
125 pub use reifydb_type::{RowNumber, Value};
126
127 pub use crate::{
128 FFIOperator, FFIOperatorMetadata, FFIOperatorWithMetadata, FlowChange, FlowChangeBuilder,
129 FlowChangeOrigin, FlowDiff,
130 context::OperatorContext,
131 error::{FFIError, Result},
132 stateful::State,
133 };
134}