mod backend;
mod compression;
mod data;
pub use backend::*;
pub use compression::*;
pub use data::*;
#[cfg(feature = "backend-json")]
mod json_backend;
#[cfg(feature = "backend-json")]
pub use json_backend::*;
#[cfg(feature = "backend-msgpack")]
mod msgpack_backend;
#[cfg(feature = "backend-msgpack")]
pub use msgpack_backend::*;
use serde::{Deserialize, Serialize};
use crate::asset::AssetId;
#[derive(Debug)]
#[derive(Deserialize, Serialize)]
pub struct SerializedAsset {
#[serde(default)]
pub id: AssetId,
pub asset_type: String,
pub data: SerializedData,
}
impl PartialEq for SerializedAsset {
fn eq(&self, other: &Self) -> bool {
self.id == other.id && self.asset_type == other.asset_type && self.data == other.data
}
}
#[cfg(test)]
mod test {
use super::*;
use rand::RngExt;
use serde_test::{Token, assert_tokens};
use std::sync::LazyLock;
static DATA: LazyLock<SerializedData> = LazyLock::new(|| {
let mut rng = rand::rng();
let mut data = vec![0u8; 128];
rng.fill(&mut data[..]);
SerializedData::Uncompressed(data)
});
#[test]
fn serialized_asset_serde() {
let mut rng = rand::rng();
let id: AssetId = rng.random();
let asset_type: String = "TestAsset".into();
let asset = SerializedAsset {
id,
asset_type: asset_type.clone(),
data: DATA.clone(),
};
let tokens = &[
Token::Struct {
name: "SerializedAsset",
len: 3,
},
Token::Str("id"),
Token::U64(asset.id.into()),
Token::Str("asset_type"),
Token::String("TestAsset"),
Token::Str("data"),
Token::Bytes(DATA.data()),
Token::StructEnd,
];
assert_tokens(&asset, tokens);
}
}