use crate::asset::{AssetSerializationBackend, SerializedAsset};
pub struct MsgpackAssetSerializationBackend;
impl AssetSerializationBackend for MsgpackAssetSerializationBackend {
fn serialize(&self, asset: &SerializedAsset) -> anyhow::Result<Vec<u8>> {
Ok(rmp_serde::to_vec(asset)?)
}
fn deserialize(&self, bytes: &[u8]) -> anyhow::Result<SerializedAsset> {
Ok(rmp_serde::from_slice(bytes)?)
}
}
#[cfg(test)]
mod test {
use super::*;
use crate::asset::SerializedData;
use rand::prelude::*;
#[test]
fn serialize_deserialize_asset() {
let backend = MsgpackAssetSerializationBackend;
let asset_type = (0..10)
.map(|_| rand::rng().random_range('a'..='z'))
.collect::<String>();
let data: [u8; 128] = rand::rng().random();
let asset = SerializedAsset {
id: rand::rng().random(),
asset_type,
data: SerializedData::Uncompressed(Vec::from(data)),
};
let serialized = backend.serialize(&asset).unwrap();
let deserialized = backend.deserialize(&serialized).unwrap();
assert_eq!(asset, deserialized);
}
}