use crate::rpc::error::RpcServiceError;
use crate::rpc::message::{AppendEntriesRequest, AppendEntriesResponse};
use crate::rpc::message::{InstallSnapshotRequest, InstallSnapshotResponse};
use crate::rpc::message::{ReplicaRecoverRequest, ReplicaRecoverResponse};
use crate::rpc::message::{TransferPrimaryRequest, TransferPrimaryResponse};
use crate::storage::GetFileService;
use crate::TypeConfig;
pub trait ReplicaService<C>: GetFileService<C>
where C: TypeConfig {
async fn handle_append_entries_request(&self, request: AppendEntriesRequest<C>) -> Result<AppendEntriesResponse, RpcServiceError>;
async fn handle_transfer_primary_request(
&self,
request: TransferPrimaryRequest<C>,
) -> Result<TransferPrimaryResponse, RpcServiceError>;
async fn handle_replica_recover_request(
&self,
request: ReplicaRecoverRequest<C>,
) -> Result<ReplicaRecoverResponse, RpcServiceError>;
async fn handle_install_snapshot_request(
&self,
request: InstallSnapshotRequest<C>,
) -> Result<InstallSnapshotResponse, RpcServiceError>;
}