//! [`LogSource`]: the read side of a replica.
use async_trait;
use crateDecodedEntry;
use crateHasCursors;
use crateUuid;
use SyncError;
/// The pull side of replication: publish progress as cursors, hand back entries
/// past a position.
///
/// A driver diffs a peer's cursors against its own and pulls only the gap.
/// Keeping the cheap cursor digest separate from the payload avoids a thundering
/// herd — many holders advertise "I have X" for almost nothing, and the receiver
/// fetches X once. Object-safe, like [`LogProcessor`](super::LogProcessor).