Skip to main content

reifydb_sdk/operator/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use std::collections::HashMap;
5
6use reifydb_type::value::{Value, row_number::RowNumber};
7
8pub mod builder;
9pub mod change;
10pub mod column;
11pub mod context;
12pub mod diff;
13pub mod view_column;
14pub mod view_row;
15
16use change::BorrowedChange;
17use column::OperatorColumn;
18use context::OperatorContext;
19use reifydb_core::interface::catalog::flow::FlowNodeId;
20use reifydb_type::value::datetime::DateTime;
21
22use crate::error::Result;
23
24pub trait FFIOperatorMetadata {
25	const NAME: &'static str;
26	const API: u32;
27	const VERSION: &'static str;
28	const DESCRIPTION: &'static str;
29	const INPUT_COLUMNS: &'static [OperatorColumn];
30	const OUTPUT_COLUMNS: &'static [OperatorColumn];
31	const CAPABILITIES: u32;
32}
33
34pub trait FFIOperator: 'static {
35	fn new(operator_id: FlowNodeId, config: &HashMap<String, Value>) -> Result<Self>
36	where
37		Self: Sized;
38
39	fn apply(&mut self, ctx: &mut OperatorContext, input: BorrowedChange<'_>) -> Result<()>;
40
41	fn pull(&mut self, ctx: &mut OperatorContext, row_numbers: &[RowNumber]) -> Result<()>;
42
43	fn tick(&mut self, _ctx: &mut OperatorContext, _timestamp: DateTime) -> Result<bool> {
44		Ok(false)
45	}
46
47	fn flush_state(&mut self, _ctx: &mut OperatorContext) -> Result<()> {
48		Ok(())
49	}
50}
51
52pub trait FFIOperatorWithMetadata: FFIOperator + FFIOperatorMetadata {}
53impl<T> FFIOperatorWithMetadata for T where T: FFIOperator + FFIOperatorMetadata {}