use std::sync::Arc;
use super::{
items::SideState,
mapping::ResolvedMapping,
operation::{ItemOp, MappingUidSource, PropertyOp},
ordering::DeletionBarrier,
status::{ItemPairStatus, MappingUid},
};
use crate::property::Property;
pub trait Mode: Send + Sync {
fn decide_item_action(
&self,
side_a: Option<SideState>,
side_b: Option<SideState>,
previous: Option<ItemPairStatus>,
mapping: &Arc<ResolvedMapping>,
mapping_uid_source: MappingUidSource,
on_complete: Option<&DeletionBarrier>,
) -> Option<ItemOp>;
#[allow(clippy::too_many_arguments)]
fn decide_property_action(
&self,
property: Property,
value_a: Option<String>,
value_b: Option<String>,
previous: Option<String>,
mapping: &Arc<ResolvedMapping>,
mapping_uid: MappingUid,
on_complete: Option<&DeletionBarrier>,
) -> Option<PropertyOp>;
}