mirror of
https://github.com/EasyTier/EasyTier.git
synced 2025-09-27 04:56:07 +08:00

This patch removes Tarpc & Tonic GRPC and implements a customized rpc framework, which can be used by peer rpc and cli interface. web config server can also use this rpc framework. moreover, rewrite the public server logic, use ospf route to implement public server based networking. this make public server mesh possible.
85 lines
3.3 KiB
Rust
85 lines
3.3 KiB
Rust
use prost::DecodeError;
|
|
|
|
use super::rpc_types;
|
|
|
|
include!(concat!(env!("OUT_DIR"), "/error.rs"));
|
|
|
|
impl From<&rpc_types::error::Error> for Error {
|
|
fn from(e: &rpc_types::error::Error) -> Self {
|
|
use super::error::error::Error as ProtoError;
|
|
match e {
|
|
rpc_types::error::Error::ExecutionError(e) => Self {
|
|
error: Some(ProtoError::ExecuteError(ExecuteError {
|
|
error_message: e.to_string(),
|
|
})),
|
|
},
|
|
rpc_types::error::Error::DecodeError(_) => Self {
|
|
error: Some(ProtoError::ProstDecodeError(ProstDecodeError {})),
|
|
},
|
|
rpc_types::error::Error::EncodeError(_) => Self {
|
|
error: Some(ProtoError::ProstEncodeError(ProstEncodeError {})),
|
|
},
|
|
rpc_types::error::Error::InvalidMethodIndex(m, s) => Self {
|
|
error: Some(ProtoError::InvalidMethodIndex(InvalidMethodIndex {
|
|
method_index: *m as u32,
|
|
service_name: s.to_string(),
|
|
})),
|
|
},
|
|
rpc_types::error::Error::InvalidServiceKey(s, _) => Self {
|
|
error: Some(ProtoError::InvalidService(InvalidService {
|
|
service_name: s.to_string(),
|
|
})),
|
|
},
|
|
rpc_types::error::Error::MalformatRpcPacket(e) => Self {
|
|
error: Some(ProtoError::MalformatRpcPacket(MalformatRpcPacket {
|
|
error_message: e.to_string(),
|
|
})),
|
|
},
|
|
rpc_types::error::Error::Timeout(e) => Self {
|
|
error: Some(ProtoError::Timeout(Timeout {
|
|
error_message: e.to_string(),
|
|
})),
|
|
},
|
|
#[allow(unreachable_patterns)]
|
|
e => Self {
|
|
error: Some(ProtoError::OtherError(OtherError {
|
|
error_message: e.to_string(),
|
|
})),
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<&Error> for rpc_types::error::Error {
|
|
fn from(e: &Error) -> Self {
|
|
use super::error::error::Error as ProtoError;
|
|
match &e.error {
|
|
Some(ProtoError::ExecuteError(e)) => {
|
|
Self::ExecutionError(anyhow::anyhow!(e.error_message.clone()))
|
|
}
|
|
Some(ProtoError::ProstDecodeError(_)) => {
|
|
Self::DecodeError(DecodeError::new("decode error"))
|
|
}
|
|
Some(ProtoError::ProstEncodeError(_)) => {
|
|
Self::DecodeError(DecodeError::new("encode error"))
|
|
}
|
|
Some(ProtoError::InvalidMethodIndex(e)) => {
|
|
Self::InvalidMethodIndex(e.method_index as u8, e.service_name.clone())
|
|
}
|
|
Some(ProtoError::InvalidService(e)) => {
|
|
Self::InvalidServiceKey(e.service_name.clone(), "".to_string())
|
|
}
|
|
Some(ProtoError::MalformatRpcPacket(e)) => {
|
|
Self::MalformatRpcPacket(e.error_message.clone())
|
|
}
|
|
Some(ProtoError::Timeout(e)) => {
|
|
Self::ExecutionError(anyhow::anyhow!(e.error_message.clone()))
|
|
}
|
|
Some(ProtoError::OtherError(e)) => {
|
|
Self::ExecutionError(anyhow::anyhow!(e.error_message.clone()))
|
|
}
|
|
None => Self::ExecutionError(anyhow::anyhow!("unknown error {:?}", e)),
|
|
}
|
|
}
|
|
}
|