muta_protocol/fixed_codec/
mod.rs

1#[macro_use]
2mod r#macro;
3pub mod epoch;
4pub mod primitive;
5pub mod receipt;
6#[cfg(test)]
7pub mod tests;
8pub mod transaction;
9
10use std::error::Error;
11
12use bytes::Bytes;
13use derive_more::{Display, From};
14
15use crate::{ProtocolError, ProtocolErrorKind, ProtocolResult};
16
17// Consistent serialization trait using rlp-algorithm
18pub trait FixedCodec: Sized {
19    fn encode_fixed(&self) -> ProtocolResult<Bytes>;
20
21    fn decode_fixed(bytes: Bytes) -> ProtocolResult<Self>;
22}
23
24#[derive(Debug, Display, From)]
25pub enum FixedCodecError {
26    Decoder(rlp::DecoderError),
27
28    StringUTF8(std::string::FromUtf8Error),
29
30    #[display(fmt = "wrong bytes of bool")]
31    DecodeBool,
32
33    #[display(fmt = "wrong bytes of u8")]
34    DecodeUint8,
35}
36
37impl Error for FixedCodecError {}
38
39impl From<FixedCodecError> for ProtocolError {
40    fn from(err: FixedCodecError) -> ProtocolError {
41        ProtocolError::new(ProtocolErrorKind::FixedCodec, Box::new(err))
42    }
43}