diff --git a/ctru-rs/examples/mii-selector.rs b/ctru-rs/examples/mii-selector.rs index d489e07..4602e9b 100644 --- a/ctru-rs/examples/mii-selector.rs +++ b/ctru-rs/examples/mii-selector.rs @@ -1,4 +1,4 @@ -use ctru::applets::mii_selector::MiiSelector; +use ctru::applets::mii_selector::{LaunchError, MiiSelector, Options}; use ctru::prelude::*; fn main() { @@ -10,20 +10,24 @@ fn main() { let _console = Console::new(gfx.top_screen.borrow_mut()); let mut mii_selector = MiiSelector::new(); + mii_selector.set_options(Options::MII_SELECTOR_CANCEL); mii_selector.set_initial_index(3); mii_selector.blacklist_user_mii(0.into()); mii_selector.set_title("Great Mii Selector!"); - let result = mii_selector.launch().unwrap(); - - println!("Is Mii selected?: {:?}", result.is_mii_selected); - println!("Mii type: {:?}", result.mii_type); - println!("Name: {:?}", result.mii_data.name); - println!("Author: {:?}", result.mii_data.author_name); - println!( - "Does the Mii have moles?: {:?}", - result.mii_data.mole_details.is_enabled - ); + match mii_selector.launch() { + Ok(result) => { + println!("Mii type: {:?}", result.mii_type); + println!("Name: {:?}", result.mii_data.name); + println!("Author: {:?}", result.mii_data.author_name); + println!( + "Does the Mii have moles?: {:?}", + result.mii_data.mole_details.is_enabled + ); + } + Err(LaunchError::InvalidChecksum) => println!("Corrupt Mii selected"), + Err(LaunchError::NoMiiSelected) => println!("No Mii selected"), + } // Main loop while apt.main_loop() { diff --git a/ctru-rs/src/applets/mii_selector.rs b/ctru-rs/src/applets/mii_selector.rs index a6acd61..bd0eac2 100644 --- a/ctru-rs/src/applets/mii_selector.rs +++ b/ctru-rs/src/applets/mii_selector.rs @@ -56,14 +56,16 @@ pub struct MiiSelector { #[derive(Clone, Debug)] pub struct SelectionResult { pub mii_data: MiiData, - pub is_mii_selected: bool, pub mii_type: MiiType, } /// Error type for the Mii selector #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum LaunchError { + /// The selected Mii's data is corrupt in some way InvalidChecksum, + /// Either the user cancelled the selection (see [Options::MII_SELECTOR_CANCEL]), or no valid Miis were available to select + NoMiiSelected, } impl MiiSelector { @@ -147,6 +149,10 @@ impl MiiSelector { let mut return_val = Box::::default(); unsafe { ctru_sys::miiSelectorLaunch(self.config.as_mut(), return_val.as_mut()) } + if return_val.no_mii_selected != 0 { + return Err(LaunchError::NoMiiSelected); + } + if unsafe { ctru_sys::miiSelectorChecksumIsValid(return_val.as_mut()) } { Ok((*return_val).into()) } else { @@ -168,7 +174,6 @@ impl From for SelectionResult { SelectionResult { mii_data: raw_mii_data.into(), - is_mii_selected: ret.no_mii_selected == 0, mii_type: if ret.guest_mii_index != 0xFFFFFFFF { MiiType::Guest { index: ret.guest_mii_index,