use anyhow::Result;
use async_trait::async_trait;
use crate::raft::{AppendEntriesRequest, AppendEntriesResponse};
use crate::raft::{InstallSnapshotRequest, InstallSnapshotResponse};
use crate::raft::{VoteRequest, VoteResponse};
use crate::{AppData, NodeId};
#[async_trait]
pub trait RaftNetwork<D>: Send + Sync + 'static
where
D: AppData,
{
async fn append_entries(&self, target: NodeId, rpc: AppendEntriesRequest<D>) -> Result<AppendEntriesResponse>;
async fn install_snapshot(&self, target: NodeId, rpc: InstallSnapshotRequest) -> Result<InstallSnapshotResponse>;
async fn vote(&self, target: NodeId, rpc: VoteRequest) -> Result<VoteResponse>;
}