//! Encoding helpers for payloads and internal records.
use serde::{de::DeserializeOwned, Serialize};
/// Encodes a value with MessagePack for storage or delivery.
pub fn encode(input: impl Serialize) -> anyhow::Result<Vec<u8>> {
Ok(rmp_serde::to_vec(&input)?)
}
/// Encodes a value as JSON text.
pub fn encode_json(input: impl Serialize) -> anyhow::Result<String> {
Ok(serde_json::to_string_pretty(&input)?)
}
/// Decodes a MessagePack value produced by [`encode`].
pub fn decode<T: DeserializeOwned>(input: &[u8]) -> anyhow::Result<T> {
Ok(rmp_serde::from_slice(input)?)
}
/// Returns a lowercase BLAKE3 hash of the input bytes.
pub fn hash(input: &[u8]) -> String {
blake3::hash(input).to_hex().to_lowercase()
}