pub mod codec {
pub use parity_scale_codec::{Compact, Decode, Encode, Input};
pub trait Codec: Encode + Decode {}
impl<T: Encode + Decode> Codec for T {}
pub fn encode_compact_u32(value: u32) -> Vec<u8> {
Compact(value).encode()
}
pub fn decode_compact_u32<I: Input>(input: &mut I) -> anyhow::Result<u32> {
let compact = Compact::<u32>::decode(input)?;
Ok(compact.0)
}
}
pub use codec::{Codec, Decode, Encode};
#[cfg(test)]
mod codec_tests {
use super::codec::*;
#[test]
fn test_basic_codec() {
let value = 42u32;
let encoded = value.encode();
let decoded = u32::decode(&mut &encoded[..]).unwrap();
assert_eq!(decoded, value);
}
#[test]
fn test_compact_codec() {
let value = 42u32;
let encoded = encode_compact_u32(value);
let decoded = decode_compact_u32(&mut &encoded[..]).unwrap();
assert_eq!(decoded, value);
}
}