use serde::{Deserialize, Serialize}; pub type HandleId = u32; pub type AssetId = i32; #[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: AssetId, pub asset_name: String, pub bank_type: BankType, pub offset: u64, pub size: u64, pub decoded_size: u64, pub codec: String, // e.g., "NONE" (legacy alias: "RAW") pub metadata: serde_json::Value, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct PreloadEntry { pub asset_id: AssetId, pub slot: usize, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[repr(i32)] pub enum LoadStatus { PENDING = 0, LOADING = 1, READY = 2, COMMITTED = 3, CANCELED = 4, ERROR = 5, UnknownHandle = 6, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(i32)] pub enum AssetLoadError { AssetNotFound = 3, SlotKindMismatch = 4, SlotIndexInvalid = 5, BackendError = 6, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(i32)] pub enum AssetOpStatus { Ok = 0, UnknownHandle = 1, InvalidState = 2, } #[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 } } }