use {
super::SnapshotItem,
crate::{PeerId, groups::Cursor},
chrono::{DateTime, Utc},
core::ops::Range,
derive_more::From,
serde::{Deserialize, Serialize},
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SnapshotRequest {
pub requested_by: PeerId,
pub requested_at: DateTime<Utc>,
}
#[derive(Clone, Serialize, Deserialize, From)]
#[serde(bound = "")]
pub enum SnapshotSyncMessage<T: SnapshotItem> {
RequestSnapshot,
SnapshotOffer(SnapshotInfo),
FetchDataRequest(FetchDataRequest),
FetchDataResponse(FetchDataResponse<T>),
}
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
pub struct SnapshotInfo {
pub anchor: Cursor,
pub items_count: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FetchDataRequest {
pub anchor: Cursor,
pub range: Range<u64>,
}
#[derive(Clone, Serialize, Deserialize)]
#[serde(bound = "")]
pub struct FetchDataResponse<T: SnapshotItem> {
pub anchor: Cursor,
pub offset: u64,
pub items: Vec<T>,
}