use alloc::vec::Vec;
use crate::blob::HEADER_SIZE;
use crate::blob::error::BlobError;
use crate::blob::kind::BlobKind;
pub fn encode_cnb<K: BlobKind>(
validity: u32,
meta: &K,
payload: &[u8],
) -> Result<Vec<u8>, BlobError> {
let mut data = encode_cnb_prefix(validity, meta)?;
data.reserve(payload.len());
data.extend_from_slice(payload);
Ok(data)
}
pub fn encode_cnb_prefix<K: BlobKind>(validity: u32, meta: &K) -> Result<Vec<u8>, BlobError> {
let meta_bytes: Vec<u8> = postcard::to_allocvec(meta).map_err(|_| BlobError::Encode)?;
let mut data = Vec::with_capacity(HEADER_SIZE + meta_bytes.len());
data.extend_from_slice(&K::MAGIC);
data.extend_from_slice(&validity.to_le_bytes());
data.extend_from_slice(&(meta_bytes.len() as u64).to_le_bytes());
data.extend_from_slice(&meta_bytes);
Ok(data)
}