griffin_core/pallas_codec/flat/
mod.rs

1mod decode;
2mod encode;
3pub mod filler;
4pub mod zigzag;
5
6use alloc::vec::Vec;
7
8pub mod en {
9    pub use super::encode::*;
10}
11
12pub mod de {
13    pub use super::decode::*;
14}
15
16pub trait Flat<'b>: en::Encode + de::Decode<'b> {
17    fn flat(&self) -> Result<Vec<u8>, en::Error> {
18        encode(self)
19    }
20
21    fn unflat(bytes: &'b [u8]) -> Result<Self, de::Error> {
22        decode(bytes)
23    }
24}
25
26pub fn encode<T>(value: &T) -> Result<Vec<u8>, en::Error>
27where
28    T: en::Encode,
29{
30    let mut e = en::Encoder::new();
31
32    value.encode(&mut e)?;
33    e.encode(filler::Filler::FillerEnd)?;
34
35    Ok(e.buffer)
36}
37
38pub fn decode<'b, T>(bytes: &'b [u8]) -> Result<T, de::Error>
39where
40    T: de::Decode<'b>,
41{
42    let mut d = de::Decoder::new(bytes);
43
44    let value = d.decode()?;
45
46    d.decode::<filler::Filler>()?;
47
48    Ok(value)
49}