use serde::{Deserialize, Serialize}; pub type HandleId = u32; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)] #[allow(non_camel_case_types)] pub enum BankType { TILES, SOUNDS, // TILEMAPS, // BLOBS, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct AssetEntry { pub asset_id: u32, pub asset_name: String, pub bank_type: BankType, pub offset: u64, pub size: u64, pub decoded_size: u64, pub codec: String, // e.g., "RAW" pub metadata: serde_json::Value, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct PreloadEntry { pub asset_name: String, pub slot: usize, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] pub enum LoadStatus { PENDING, LOADING, READY, COMMITTED, CANCELED, ERROR, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct BankStats { pub total_bytes: usize, pub used_bytes: usize, pub free_bytes: usize, pub inflight_bytes: usize, pub slot_count: usize, pub slots_occupied: usize, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SlotStats { pub asset_id: Option, pub asset_name: Option, pub generation: u32, pub resident_bytes: usize, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct SlotRef { pub asset_type: BankType, pub index: usize, } impl SlotRef { pub fn gfx(index: usize) -> Self { Self { asset_type: BankType::TILES, index, } } pub fn audio(index: usize) -> Self { Self { asset_type: BankType::SOUNDS, index, } } }