use crate::model::asset::{AssetEntry, PreloadEntry}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] pub enum AppMode { Game, System, } #[derive(Debug, Clone)] pub struct Cartridge { pub app_id: u32, pub title: String, pub app_version: String, pub app_mode: AppMode, pub entrypoint: String, pub program: Vec, pub assets: Vec, pub asset_table: Vec, pub preload: Vec, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct CartridgeDTO { pub app_id: u32, pub title: String, pub app_version: String, pub app_mode: AppMode, pub entrypoint: String, pub program: Vec, pub assets: Vec, #[serde(default)] pub asset_table: Vec, #[serde(default)] pub preload: Vec, } impl From for Cartridge { fn from(dto: CartridgeDTO) -> Self { Self { app_id: dto.app_id, title: dto.title, app_version: dto.app_version, app_mode: dto.app_mode, entrypoint: dto.entrypoint, program: dto.program, assets: dto.assets, asset_table: dto.asset_table, preload: dto.preload, } } } #[derive(Debug)] pub enum CartridgeError { NotFound, InvalidFormat, InvalidManifest, UnsupportedVersion, MissingProgram, IoError, } #[derive(Deserialize)] pub struct CartridgeManifest { pub magic: String, pub cartridge_version: u32, pub app_id: u32, pub title: String, pub app_version: String, pub app_mode: AppMode, pub entrypoint: String, #[serde(default)] pub asset_table: Vec, #[serde(default)] pub preload: Vec, }