use crate::domain::{
changeset::Changeset,
table_diff::{RowMap, TableDiff},
value_objects::{ColumnName, ExcludedColumns, Schema, TableName},
};
use anyhow::Result;
use async_trait::async_trait;
#[async_trait]
pub trait RowRepository: Send + Sync {
async fn fetch_rows(
&self,
schema: &Schema,
table: &TableName,
pk_cols: &[ColumnName],
excluded: &ExcludedColumns,
) -> Result<Vec<RowMap>>;
}
pub trait Differ: Send + Sync {
fn diff_table(
&self,
source: &[RowMap],
target: &[RowMap],
pk_cols: &[ColumnName],
table_name: &TableName,
) -> TableDiff;
}
pub trait OutputWriter: Send + Sync {
fn format(&self, changeset: &Changeset) -> Result<String>;
fn extension(&self) -> &'static str;
}
pub trait SnapshotProvider: Send + Sync {
fn get(&self, table: &TableName) -> Option<&[RowMap]>;
}