diff --git a/duckscript_sdk/src/sdk/std/release/mod.rs b/duckscript_sdk/src/sdk/std/release/mod.rs index 2e5fe45..43b44e4 100755 --- a/duckscript_sdk/src/sdk/std/release/mod.rs +++ b/duckscript_sdk/src/sdk/std/release/mod.rs @@ -55,13 +55,14 @@ impl Command for CommandImpl { (arguments[0].to_string(), false) }; - if recursive { - remove_handle_recursive(state, key); + let removed = if recursive { + remove_handle_recursive(state, key) } else { - remove_handle(state, key); - } + let old_value = remove_handle(state, key); + old_value.is_some() + }; - CommandResult::Continue(Some(true.to_string())) + CommandResult::Continue(Some(removed.to_string())) } } } diff --git a/duckscript_sdk/src/utils/state.rs b/duckscript_sdk/src/utils/state.rs index 1366ad1..aa32139 100644 --- a/duckscript_sdk/src/utils/state.rs +++ b/duckscript_sdk/src/utils/state.rs @@ -68,30 +68,40 @@ pub(crate) fn remove_handle( handle_state.remove(&key) } -pub(crate) fn remove_handle_recursive(state: &mut HashMap, key: String) { - if let Some(state_value) = remove_handle(state, key.to_string()) { - match state_value { +pub(crate) fn remove_handle_recursive( + state: &mut HashMap, + key: String, +) -> bool { + match remove_handle(state, key.to_string()) { + Some(state_value) => match state_value { StateValue::List(list) => { for value in list { if let StateValue::String(value) = value { - remove_handle_recursive(state, value) + remove_handle_recursive(state, value); }; } + + true } StateValue::Set(set) => { for value in set { - remove_handle_recursive(state, value) + remove_handle_recursive(state, value); } + + true } StateValue::SubState(map) => { for (_, map_value) in map { if let StateValue::String(value) = map_value { - remove_handle_recursive(state, value) + remove_handle_recursive(state, value); }; } + + true } - _ => (), - } + _ => true, + }, + None => false, } }