muta_protocol/
lib.rs

1#![feature(test)]
2
3pub mod codec;
4pub mod fixed_codec;
5pub mod traits;
6pub mod types;
7
8use std::error::Error;
9
10pub use bytes::{Buf, BufMut, Bytes, BytesMut};
11use derive_more::{Constructor, Display};
12
13#[derive(Debug, Clone)]
14pub enum ProtocolErrorKind {
15    // traits
16    API,
17    Consensus,
18    Executor,
19    Mempool,
20    Network,
21    Storage,
22    Runtime,
23    Binding,
24    BindingMacro,
25    Service,
26    Main,
27
28    // codec
29    Codec,
30
31    // fixed codec
32    FixedCodec,
33
34    // types
35    Types,
36}
37
38// refer to https://github.com/rust-lang/rust/blob/a17951c4f80eb5208030f91fdb4ae93919fa6b12/src/libstd/io/error.rs#L73
39#[derive(Debug, Constructor, Display)]
40#[display(fmt = "[ProtocolError] Kind: {:?} Error: {:?}", kind, error)]
41pub struct ProtocolError {
42    kind:  ProtocolErrorKind,
43    error: Box<dyn Error + Send>,
44}
45
46impl From<ProtocolError> for Box<dyn Error + Send> {
47    fn from(error: ProtocolError) -> Self {
48        Box::new(error) as Box<dyn Error + Send>
49    }
50}
51
52impl Error for ProtocolError {}
53
54pub type ProtocolResult<T> = Result<T, ProtocolError>;