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 From for Result 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 From> for RaftReply where T: Serialize, E: Serialize, { fn from(r: Result) -> 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, } } } } }