griffin_core/pallas_codec/flat/
mod.rs1mod 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}