From 070de964be66870d955b2bf1f7a68c1c6ac97e9d Mon Sep 17 00:00:00 2001 From: DeltaF1 Date: Mon, 8 May 2023 11:29:01 -0400 Subject: [PATCH] Add an error code for when Mii selection is cancelled --- ctru-rs/examples/mii-selector.rs | 26 +++++++++++++++----------- ctru-rs/src/applets/mii_selector.rs | 7 +++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/ctru-rs/examples/mii-selector.rs b/ctru-rs/examples/mii-selector.rs index d489e07..363a034 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}; use ctru::prelude::*; fn main() { @@ -14,16 +14,20 @@ fn main() { 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!("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 + ); + } + 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..4d89288 100644 --- a/ctru-rs/src/applets/mii_selector.rs +++ b/ctru-rs/src/applets/mii_selector.rs @@ -56,6 +56,8 @@ pub struct MiiSelector { #[derive(Clone, Debug)] pub struct SelectionResult { pub mii_data: MiiData, + + #[deprecated] pub is_mii_selected: bool, pub mii_type: MiiType, } @@ -64,6 +66,7 @@ pub struct SelectionResult { #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum LaunchError { InvalidChecksum, + NoMiiSelected, } impl MiiSelector { @@ -147,6 +150,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 {