worktable/index/
table_secondary_index.rs1use std::collections::HashMap;
2
3use data_bucket::Link;
4
5use crate::Difference;
6use crate::WorkTableError;
7
8pub trait TableSecondaryIndex<Row, AvailableTypes> {
9 fn save_row(&self, row: Row, link: Link) -> Result<(), WorkTableError>;
10
11 fn delete_row(&self, row: Row, link: Link) -> Result<(), WorkTableError>;
12
13 fn process_difference(
14 &self,
15 link: Link,
16 differences: HashMap<&str, Difference<AvailableTypes>>,
17 ) -> Result<(), WorkTableError>;
18}
19
20pub trait TableSecondaryIndexCdc<Row, AvailableTypes, SecondaryEvents> {
21 fn save_row_cdc(&self, row: Row, link: Link) -> Result<SecondaryEvents, WorkTableError>;
22 fn delete_row_cdc(&self, row: Row, link: Link) -> Result<SecondaryEvents, WorkTableError>;
23 fn process_difference_cdc(
24 &self,
25 link: Link,
26 differences: HashMap<&str, Difference<AvailableTypes>>,
27 ) -> Result<SecondaryEvents, WorkTableError>;
28}
29
30impl<Row, AvailableTypes> TableSecondaryIndex<Row, AvailableTypes> for ()
31where
32 AvailableTypes: 'static,
33{
34 fn save_row(&self, _: Row, _: Link) -> Result<(), WorkTableError> {
35 Ok(())
36 }
37
38 fn delete_row(&self, _: Row, _: Link) -> Result<(), WorkTableError> {
39 Ok(())
40 }
41
42 fn process_difference(
43 &self,
44 _: Link,
45 _: HashMap<&str, Difference<AvailableTypes>>,
46 ) -> Result<(), WorkTableError> {
47 Ok(())
48 }
49}