use crate::RaftTypeConfig;
use crate::StorageError;
use crate::type_config::TypeConfigExt;
use crate::type_config::alias::LogIdOf;
use crate::type_config::alias::SnapshotSignatureOf;
pub(crate) trait StorageIOResult<C, T>
where C: RaftTypeConfig
{
#[allow(dead_code)]
fn sto_write_log_entry(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>>;
#[allow(dead_code)]
fn sto_read_log_entry(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>>;
#[allow(dead_code)]
fn sto_read_log_at_index(self, log_index: u64) -> Result<T, StorageError<C>>;
fn sto_write_logs(self) -> Result<T, StorageError<C>>;
fn sto_read_logs(self) -> Result<T, StorageError<C>>;
fn sto_write_vote(self) -> Result<T, StorageError<C>>;
fn sto_read_vote(self) -> Result<T, StorageError<C>>;
fn sto_apply(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>>;
#[allow(dead_code)]
fn sto_write_sm(self) -> Result<T, StorageError<C>>;
fn sto_read_sm(self) -> Result<T, StorageError<C>>;
fn sto_write_snapshot(self, signature: Option<SnapshotSignatureOf<C>>) -> Result<T, StorageError<C>>;
fn sto_read_snapshot(self, signature: Option<SnapshotSignatureOf<C>>) -> Result<T, StorageError<C>>;
#[allow(dead_code)]
fn sto_read(self) -> Result<T, StorageError<C>>;
fn sto_write(self) -> Result<T, StorageError<C>>;
}
impl<C, T> StorageIOResult<C, T> for Result<T, std::io::Error>
where C: RaftTypeConfig
{
fn sto_write_log_entry(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write_log_entry(log_id, C::err_from_error(&e)))
}
fn sto_read_log_entry(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_log_entry(log_id, C::err_from_error(&e)))
}
fn sto_read_log_at_index(self, log_index: u64) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_log_at_index(log_index, C::err_from_error(&e)))
}
fn sto_write_logs(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write_logs(C::err_from_error(&e)))
}
fn sto_read_logs(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_logs(C::err_from_error(&e)))
}
fn sto_write_vote(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write_vote(C::err_from_error(&e)))
}
fn sto_read_vote(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_vote(C::err_from_error(&e)))
}
fn sto_apply(self, log_id: LogIdOf<C>) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::apply(log_id, C::err_from_error(&e)))
}
fn sto_write_sm(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write_state_machine(C::err_from_error(&e)))
}
fn sto_read_sm(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_state_machine(C::err_from_error(&e)))
}
fn sto_write_snapshot(self, signature: Option<SnapshotSignatureOf<C>>) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write_snapshot(signature, C::err_from_error(&e)))
}
fn sto_read_snapshot(self, signature: Option<SnapshotSignatureOf<C>>) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read_snapshot(signature, C::err_from_error(&e)))
}
fn sto_read(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::read(C::err_from_error(&e)))
}
fn sto_write(self) -> Result<T, StorageError<C>> {
self.map_err(|e| StorageError::write(C::err_from_error(&e)))
}
}