rivetkit-core 2.3.17

Core runtime primitives for RivetKit actor hosts
Documentation
use anyhow::{Context, Result};
use vbare::OwnedVersionedData;

use crate::serde_metrics;

pub(crate) fn encode_latest_with_embedded_version<T>(
	latest: T::Latest,
	version: u16,
	label: &str,
) -> Result<Vec<u8>>
where
	T: OwnedVersionedData,
{
	serde_metrics::measure_serialize("bare", label, || {
		T::wrap_latest(latest)
			.serialize_with_embedded_version(version)
			.with_context(|| format!("encode {label} versioned bare payload"))
	})
}

pub(crate) fn decode_latest_with_embedded_version<T>(
	payload: &[u8],
	label: &str,
) -> Result<T::Latest>
where
	T: OwnedVersionedData,
{
	serde_metrics::measure_deserialize("bare", label, payload.len(), || {
		<T as OwnedVersionedData>::deserialize_with_embedded_version(payload)
			.with_context(|| format!("decode {label} versioned bare payload"))
	})
}