From 19e00bed75a6d5db5072157a1ddcd159aa8e42bf Mon Sep 17 00:00:00 2001 From: Aleksey Proshutinskiy Date: Wed, 13 Dec 2023 19:03:23 +0200 Subject: [PATCH] fix(spells): allow empty args for callbackSrv [NET-651] (#1942) --- crates/nox-tests/tests/spells.rs | 12 +++++++++--- sorcerer/src/spell_builtins.rs | 23 ++++++++++++++--------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/crates/nox-tests/tests/spells.rs b/crates/nox-tests/tests/spells.rs index b0636b324a..550fee0f79 100644 --- a/crates/nox-tests/tests/spells.rs +++ b/crates/nox-tests/tests/spells.rs @@ -304,14 +304,20 @@ async fn spell_return_test() { (call %init_peer_id% ("callbackSrv" "response") [obj]) (seq (seq - (call %init_peer_id% (spell_id "get_string") ["key"] value_raw) - (call %init_peer_id% ("json" "parse") [value_raw.$.str] value) + (seq + (call %init_peer_id% (spell_id "get_string") ["key"] value_raw) + (call %init_peer_id% ("json" "parse") [value_raw.$.str] value) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") []) + (call "{}" ("return" "") ["callbackSrv response failed"]) + ) ) (call "{}" ("return" "") [value]) ) ) )"#, - client.peer_id + client.peer_id, client.peer_id, ); let config = make_clock_config(1, 1, 0); diff --git a/sorcerer/src/spell_builtins.rs b/sorcerer/src/spell_builtins.rs index cf19025e63..82333badda 100644 --- a/sorcerer/src/spell_builtins.rs +++ b/sorcerer/src/spell_builtins.rs @@ -362,13 +362,18 @@ pub(crate) fn store_response( spell_service_api: SpellServiceApi, ) -> Result<(), JError> { let spell_id = parse_spell_id_from(¶ms)?; - let response: JValue = Args::next("spell_id", &mut args.function_args.into_iter())?; - let call_params = CallParams::from(spell_id.clone(), params); - spell_service_api - .update_kv(call_params, response.clone()) - .map_err(|err| { - JError::new(format!( - "Failed to store response {response} for spell {spell_id}: {err}" - )) - }) + let response: Option = Args::next_opt("response", &mut args.function_args.into_iter())?; + + if let Some(response) = response { + let call_params = CallParams::from(spell_id.clone(), params); + spell_service_api + .update_kv(call_params, response.clone()) + .map_err(|err| { + JError::new(format!( + "Failed to store response {response} for spell {spell_id}: {err}" + )) + }) + } else { + Ok(()) + } }