Browse Source

Merge pull request #122 from DeltaF1/mii-selector-return

Handle empty Mii selector return
pull/126/head
Meziu 2 years ago committed by GitHub
parent
commit
f6d16d1554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 26
      ctru-rs/examples/mii-selector.rs
  2. 9
      ctru-rs/src/applets/mii_selector.rs

26
ctru-rs/examples/mii-selector.rs

@ -1,4 +1,4 @@ @@ -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() { @@ -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() {

9
ctru-rs/src/applets/mii_selector.rs

@ -56,14 +56,16 @@ pub struct MiiSelector { @@ -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 { @@ -147,6 +149,10 @@ impl MiiSelector {
let mut return_val = Box::<ctru_sys::MiiSelectorReturn>::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<ctru_sys::MiiSelectorReturn> for SelectionResult { @@ -168,7 +174,6 @@ impl From<ctru_sys::MiiSelectorReturn> 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,

Loading…
Cancel
Save