53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
use std::sync::Arc;
|
|
|
|
use openraft::raft::AppendEntriesRequest;
|
|
use openraft::raft::InstallSnapshotRequest;
|
|
use openraft::raft::VoteRequest;
|
|
use serde::de::DeserializeOwned;
|
|
use serde::Deserialize;
|
|
use serde::Serialize;
|
|
|
|
use crate::server::dcache::{RaftReply, RaftRequest};
|
|
use crate::DcacheNodeId;
|
|
|
|
impl<T, E> From<RaftReply> for Result<T, E>
|
|
where
|
|
T: DeserializeOwned,
|
|
E: DeserializeOwned,
|
|
{
|
|
fn from(msg: RaftReply) -> Self {
|
|
if !msg.data.is_empty() {
|
|
let resp: T = serde_json::from_str(&msg.data).expect("fail to deserialize");
|
|
Ok(resp)
|
|
} else {
|
|
let err: E = serde_json::from_str(&msg.error).expect("fail to deserialize");
|
|
Err(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T, E> From<Result<T, E>> for RaftReply
|
|
where
|
|
T: Serialize,
|
|
E: Serialize,
|
|
{
|
|
fn from(r: Result<T, E>) -> Self {
|
|
match r {
|
|
Ok(x) => {
|
|
let data = serde_json::to_string(&x).expect("fail to serialize");
|
|
RaftReply {
|
|
data,
|
|
error: Default::default(),
|
|
}
|
|
}
|
|
Err(e) => {
|
|
let error = serde_json::to_string(&e).expect("fail to serialize");
|
|
RaftReply {
|
|
data: Default::default(),
|
|
error,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|