use serde::{Deserialize, Serialize};
use crate::{LogEntry, LogId, LogIndex, Membership, NodeId, Term};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrationHardState {
pub current_term: Term,
pub voted_for: Option<NodeId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrationSnapshotMeta {
pub last_included: LogId,
pub membership: Membership,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrationSnapshot {
pub meta: GroupMigrationSnapshotMeta,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrationBundle {
pub hard_state: GroupMigrationHardState,
pub purged_through: LogIndex,
pub snapshot: Option<GroupMigrationSnapshot>,
pub log: Vec<LogEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrateRequest {
pub group: u32,
pub from: NodeId,
pub bundle: GroupMigrationBundle,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GroupMigrateReply {
pub adopted: bool,
pub error: Option<String>,
}