From bbb2f9454b6580fcbd337ced61b5a1888d52ce8d Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 5 Jun 2026 01:50:16 +0900 Subject: refactor(io): model ask_and_validate validators with anyhow::Result PHP's askAndValidate throws when a validator rejects input. Change the IOInterface validator callback and return type to anyhow::Result so the call sites can return Err instead of panic, faithfully modeling the throw semantics already supported by the Question layer. Co-Authored-By: Claude Opus 4.8 --- crates/shirabe/src/util/auth_helper.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'crates/shirabe/src/util/auth_helper.rs') diff --git a/crates/shirabe/src/util/auth_helper.rs b/crates/shirabe/src/util/auth_helper.rs index 3471a54..0465b10 100644 --- a/crates/shirabe/src/util/auth_helper.rs +++ b/crates/shirabe/src/util/auth_helper.rs @@ -5,9 +5,9 @@ use anyhow::Result; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::Preg; use shirabe_php_shim::{ - E_USER_DEPRECATED, PHP_URL_HOST, PHP_URL_PATH, PHP_URL_SCHEME, PhpMixed, base64_encode, - explode, in_array, is_array, is_string, json_decode, parse_url, sprintf, str_replace, strpos, - strtolower, substr, trigger_error, trim, + E_USER_DEPRECATED, PHP_URL_HOST, PHP_URL_PATH, PHP_URL_SCHEME, PhpMixed, RuntimeException, + base64_encode, explode, in_array, is_array, is_string, json_decode, parse_url, sprintf, + str_replace, strpos, strtolower, substr, trigger_error, trim, }; use crate::config::Config; @@ -69,7 +69,7 @@ impl AuthHelper { origin, config_source.get_name(), ), - Box::new(|value: PhpMixed| -> PhpMixed { + Box::new(|value: PhpMixed| -> anyhow::Result { let input = strtolower(&substr( &trim(value.as_string().unwrap_or(""), None), 0, @@ -83,15 +83,17 @@ impl AuthHelper { ]), false, ) { - return PhpMixed::String(input); + return Ok(PhpMixed::String(input)); } - // PHP: throw new \RuntimeException('Please answer (y)es or (n)o'); - // TODO(phase-b): validator should return a recoverable error rather than panic - panic!("Please answer (y)es or (n)o"); + Err(RuntimeException { + message: "Please answer (y)es or (n)o".to_string(), + code: 0, + } + .into()) }), None, PhpMixed::String("y".to_string()), - ); + )?; if answer.as_string() == Some("y") { store = Some(()); -- cgit v1.3.1