use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
use super::address::Address;
use super::block::Record;
use super::branch::BranchId;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)]
pub enum MergeStrategy {
PreferTarget,
PreferSource,
PreferHigherRevision,
Interactive,
}
#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)]
pub struct MergeConflict {
pub address: Address,
pub base: Option<Record>,
pub target: Option<Record>,
pub source: Option<Record>,
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct MergeResult {
pub merged_records: usize,
pub conflicts: Vec<MergeConflict>,
pub auto_resolved: usize,
pub applied_records: Vec<Record>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)]
pub struct MergeLogEntry {
pub target: BranchId,
pub source: BranchId,
pub merged_records: usize,
pub conflict_count: usize,
pub at_revision: u64,
}