A bunch more work on replacing every potential panic with results
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
use crate::dynamic_data::{FleeChoice, LearnedMove, MoveChoice, PassChoice, Pokemon, TurnChoice};
|
||||
use crate::ffi::{ExternPointer, IdentifiablePointer, OwnedPtr};
|
||||
use crate::ffi::{ExternPointer, IdentifiablePointer, NativeResult, OwnedPtr};
|
||||
use anyhow::anyhow;
|
||||
use std::ptr::drop_in_place;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -57,38 +58,38 @@ extern "C" fn turn_choice_move_new(
|
||||
#[no_mangle]
|
||||
extern "C" fn turn_choice_move_learned_move(
|
||||
choice: ExternPointer<TurnChoice>,
|
||||
) -> IdentifiablePointer<Arc<LearnedMove>> {
|
||||
) -> NativeResult<IdentifiablePointer<Arc<LearnedMove>>> {
|
||||
if let TurnChoice::Move(c) = choice.as_ref() {
|
||||
return c.used_move().clone().into();
|
||||
return NativeResult::ok(c.used_move().clone().into());
|
||||
}
|
||||
panic!("Turn choice was not a learned move");
|
||||
NativeResult::err(anyhow!("Turn choice was not a learned move"))
|
||||
}
|
||||
|
||||
/// The target side the move is aimed at.
|
||||
#[no_mangle]
|
||||
extern "C" fn turn_choice_move_target_side(choice: ExternPointer<TurnChoice>) -> u8 {
|
||||
extern "C" fn turn_choice_move_target_side(choice: ExternPointer<TurnChoice>) -> NativeResult<u8> {
|
||||
if let TurnChoice::Move(c) = choice.as_ref() {
|
||||
return c.target_side();
|
||||
return NativeResult::ok(c.target_side());
|
||||
}
|
||||
panic!("Turn choice was not a learned move");
|
||||
NativeResult::err(anyhow!("Turn choice was not a learned move"))
|
||||
}
|
||||
|
||||
/// The Pokemon index on the side we're aiming at.
|
||||
#[no_mangle]
|
||||
extern "C" fn turn_choice_move_target_index(choice: ExternPointer<TurnChoice>) -> u8 {
|
||||
extern "C" fn turn_choice_move_target_index(choice: ExternPointer<TurnChoice>) -> NativeResult<u8> {
|
||||
if let TurnChoice::Move(c) = choice.as_ref() {
|
||||
return c.target_index();
|
||||
return NativeResult::ok(c.target_index());
|
||||
}
|
||||
panic!("Turn choice was not a learned move");
|
||||
NativeResult::err(anyhow!("Turn choice was not a learned move"))
|
||||
}
|
||||
|
||||
/// The priority of the move choice at the beginning of the turn.
|
||||
#[no_mangle]
|
||||
extern "C" fn turn_choice_move_priority(choice: ExternPointer<TurnChoice>) -> i8 {
|
||||
extern "C" fn turn_choice_move_priority(choice: ExternPointer<TurnChoice>) -> NativeResult<i8> {
|
||||
if let TurnChoice::Move(c) = choice.as_ref() {
|
||||
return c.priority();
|
||||
return NativeResult::ok(c.priority());
|
||||
}
|
||||
panic!("Turn choice was not a learned move");
|
||||
NativeResult::err(anyhow!("Turn choice was not a learned move"))
|
||||
}
|
||||
|
||||
/// Creates a new Turn Choice for the user to flee.
|
||||
|
||||
Reference in New Issue
Block a user