use std::path::PathBuf; use crate::prelude::*; #[derive(Default)] pub struct PathBufComponent { pub sys_path: Option, pub libretro_path: Option, pub core_assets_path: Option, pub save_path: Option, } impl RetroComponent for PathBufComponent {} impl RetroCallbacks for PathBufComponent { fn get_system_directory(&mut self) -> Option { self.sys_path.clone() } fn get_libretro_path(&mut self) -> Option { self.libretro_path.clone() } fn get_core_assets_directory(&mut self) -> Option { self.core_assets_path.clone() } fn get_save_directory(&mut self) -> Option { self.save_path.clone() } } #[derive(Default)] pub struct StderrLogComponent { pub prefix: String, } impl RetroComponent for StderrLogComponent {} impl RetroCallbacks for StderrLogComponent { fn log_print(&mut self, level: ferretro_base::retro::ffi::LogLevel, msg: &str) { eprint!("{}[{:?}] {}", self.prefix, level, msg); } } #[derive(Default)] pub struct StderrSysInfoLogComponent { pub prefix: String, } impl RetroComponent for StderrSysInfoLogComponent {} impl RetroCallbacks for StderrSysInfoLogComponent { fn set_input_descriptors(&mut self, descriptors: &Vec) -> Option { for id in descriptors { eprintln!("{}{:?}", self.prefix, id); } Some(true) } fn set_variables(&mut self, variables: &Vec) -> Option { for v in variables { eprintln!("{}{:?}", self.prefix, v); } Some(true) } fn set_subsystem_info(&mut self, subsystem_info: &Vec) -> Option { for s in subsystem_info { eprintln!("{}{:?}", self.prefix, s); } Some(true) } } #[derive(Default)] pub struct StderrCallTraceComponent { pub prefix: String, } impl RetroComponent for StderrCallTraceComponent {} impl RetroCallbacks for StderrCallTraceComponent { fn audio_sample(&mut self, left: i16, right: i16) { eprintln!("{}audio_sample({}, {})", self.prefix, left, right); } // TODO: etc... }