worktable/index/
table_secondary_index.rs

1use 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}