use std::future::Future;
use openraft_macros::add_async_trait;
use crate::OptionalSend;
use crate::OptionalSync;
use crate::RaftTypeConfig;
use crate::errors::ReplicationClosed;
use crate::errors::StreamingError;
use crate::network::RPCOption;
use crate::raft::SnapshotResponse;
use crate::type_config::alias::SnapshotOf;
use crate::type_config::alias::VoteOf;
#[add_async_trait]
pub trait NetSnapshot<C>: OptionalSend + OptionalSync + 'static
where C: RaftTypeConfig
{
async fn full_snapshot(
&mut self,
vote: VoteOf<C>,
snapshot: SnapshotOf<C>,
cancel: impl Future<Output = ReplicationClosed> + OptionalSend + 'static,
option: RPCOption,
) -> Result<SnapshotResponse<C>, StreamingError<C>>;
}