diff --git a/examples/ruby/custom_type.rs b/examples/ruby/custom_type.rs index e775a7f..2877b8d 100644 --- a/examples/ruby/custom_type.rs +++ b/examples/ruby/custom_type.rs @@ -1,10 +1,10 @@ use bevy::prelude::*; +use bevy_scriptum::ScriptingError; use bevy_scriptum::prelude::*; use bevy_scriptum::runtimes::ruby::magnus; use bevy_scriptum::runtimes::ruby::magnus::Module as _; use bevy_scriptum::runtimes::ruby::magnus::Object as _; use bevy_scriptum::runtimes::ruby::prelude::*; -use bevy_scriptum::ScriptingError; fn main() { App::new() @@ -39,7 +39,7 @@ fn startup( assets_server: Res, ) { scripting_runtime - .with_engine_thread(|ruby| { + .with_engine_send(|ruby| { let my_type = ruby.define_class("MyType", ruby.class_object())?; my_type.define_singleton_method("new", magnus::function!(MyType::new, 0))?; my_type.define_method("my_method", magnus::method!(MyType::my_method, 0))?; diff --git a/examples/ruby/function_params.rs b/examples/ruby/function_params.rs index ed3699b..65fb3b6 100644 --- a/examples/ruby/function_params.rs +++ b/examples/ruby/function_params.rs @@ -1,6 +1,6 @@ use bevy::prelude::*; use bevy_scriptum::prelude::*; -use bevy_scriptum::runtimes::ruby::{prelude::*, RArray}; +use bevy_scriptum::runtimes::ruby::{RArray, prelude::*}; fn main() { App::new() @@ -31,7 +31,7 @@ fn main() { .add_function( String::from("fun_with_i64_and_array_param"), |In((x, y)): In<(i64, RArray)>, runtime: Res| { - runtime.with_engine_thread(move |ruby| { + runtime.with_engine_send(move |ruby| { println!( "called with i64: {} and dynamically typed array: {:?}", x, diff --git a/examples/ruby/function_return_value.rs b/examples/ruby/function_return_value.rs index 2dbfc46..02875e4 100644 --- a/examples/ruby/function_return_value.rs +++ b/examples/ruby/function_return_value.rs @@ -1,8 +1,8 @@ use bevy::{app::AppExit, prelude::*}; use bevy_scriptum::prelude::*; use bevy_scriptum::runtimes::ruby::prelude::*; -use magnus::value::InnerValue; use magnus::TryConvert; +use magnus::value::InnerValue; fn main() { App::new() @@ -33,7 +33,7 @@ fn call_lua_on_update_from_rust( .call_fn("get_value", &mut script_data, entity, ()) .unwrap() .0; - scripting_runtime.with_engine_thread(move |ruby| { + scripting_runtime.with_engine(|ruby| { let val: i32 = TryConvert::try_convert(val.get_inner_with(&ruby)).unwrap(); println!("script returned: {}", val); }); diff --git a/src/callback.rs b/src/callback.rs index cc76bcb..f6a9a3c 100644 --- a/src/callback.rs +++ b/src/callback.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use core::any::TypeId; use std::sync::{Arc, Mutex}; -use crate::{promise::Promise, Runtime}; +use crate::{Runtime, promise::Promise}; /// A system that can be used to call a script function. pub struct CallbackSystem { @@ -79,7 +79,7 @@ where let mut runtime = world.get_resource_mut::().expect("No runtime resource"); if R::needs_own_thread() { - runtime.with_engine_thread_mut(move |engine| { + runtime.with_engine_send_mut(move |engine| { Out::into_runtime_value_with_engine(result, engine) }) } else { diff --git a/src/lib.rs b/src/lib.rs index 844940a..569b09b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -305,7 +305,7 @@ pub trait Runtime: Resource + Default { /// Provides mutable reference to raw scripting engine instance. /// Can be used to directly interact with an interpreter to use interfaces /// that bevy_scriptum does not provided adapters for. - fn with_engine_thread_mut( + fn with_engine_send_mut( &mut self, f: impl FnOnce(&mut Self::RawEngine) -> T + Send + 'static, ) -> T; @@ -313,7 +313,7 @@ pub trait Runtime: Resource + Default { /// Provides immutable reference to raw scripting engine instance. /// Can be used to directly interact with an interpreter to use interfaces /// that bevy_scriptum does not provided adapters for. - fn with_engine_thread( + fn with_engine_send( &self, f: impl FnOnce(&Self::RawEngine) -> T + Send + 'static, ) -> T; @@ -342,12 +342,12 @@ pub trait Runtime: Resource + Default { name: String, arg_types: Vec, f: impl Fn( - Self::CallContext, - Vec, - ) -> Result, ScriptingError> - + Send - + Sync - + 'static, + Self::CallContext, + Vec, + ) -> Result, ScriptingError> + + Send + + Sync + + 'static, ) -> Result<(), ScriptingError>; /// Calls a function by name defined within the runtime in the context of the diff --git a/src/runtimes/lua.rs b/src/runtimes/lua.rs index 0926649..32d34b0 100644 --- a/src/runtimes/lua.rs +++ b/src/runtimes/lua.rs @@ -13,10 +13,10 @@ use serde::Deserialize; use std::sync::{Arc, Mutex}; use crate::{ + ENTITY_VAR_NAME, FuncArgs, Runtime, ScriptingError, assets::GetExtensions, callback::{FromRuntimeValueWithEngine, IntoRuntimeValueWithEngine}, promise::Promise, - FuncArgs, Runtime, ScriptingError, ENTITY_VAR_NAME, }; type LuaEngine = Arc>; @@ -197,14 +197,14 @@ impl Runtime for LuaRuntime { name: String, _arg_types: Vec, f: impl Fn( - Self::CallContext, - Vec, - ) -> Result< - crate::promise::Promise, - crate::ScriptingError, - > + Send - + Sync - + 'static, + Self::CallContext, + Vec, + ) -> Result< + crate::promise::Promise, + crate::ScriptingError, + > + Send + + Sync + + 'static, ) -> Result<(), crate::ScriptingError> { self.with_engine(|engine| { let func = engine @@ -283,14 +283,14 @@ impl Runtime for LuaRuntime { f(&engine) } - fn with_engine_thread_mut( + fn with_engine_send_mut( &mut self, f: impl FnOnce(&mut Self::RawEngine) -> T + Send + 'static, ) -> T { self.with_engine_mut(f) } - fn with_engine_thread( + fn with_engine_send( &self, f: impl FnOnce(&Self::RawEngine) -> T + Send + 'static, ) -> T { diff --git a/src/runtimes/rhai.rs b/src/runtimes/rhai.rs index ca2b950..492ef6e 100644 --- a/src/runtimes/rhai.rs +++ b/src/runtimes/rhai.rs @@ -11,10 +11,10 @@ use rhai::{CallFnOptions, Dynamic, Engine, FnPtr, Scope, Variant}; use serde::Deserialize; use crate::{ + ENTITY_VAR_NAME, FuncArgs, Runtime, ScriptingError, assets::GetExtensions, callback::{FromRuntimeValueWithEngine, IntoRuntimeValueWithEngine}, promise::Promise, - FuncArgs, Runtime, ScriptingError, ENTITY_VAR_NAME, }; #[derive(Asset, Debug, Deserialize, TypePath)] @@ -118,12 +118,12 @@ impl Runtime for RhaiRuntime { name: String, arg_types: Vec, f: impl Fn( - Self::CallContext, - Vec, - ) -> Result, ScriptingError> - + Send - + Sync - + 'static, + Self::CallContext, + Vec, + ) -> Result, ScriptingError> + + Send + + Sync + + 'static, ) -> Result<(), ScriptingError> { self.engine .register_raw_fn(name, arg_types, move |context, args| { @@ -192,14 +192,14 @@ impl Runtime for RhaiRuntime { f(&self.engine) } - fn with_engine_thread_mut( + fn with_engine_send_mut( &mut self, f: impl FnOnce(&mut Self::RawEngine) -> T + Send + 'static, ) -> T { self.with_engine_mut(f) } - fn with_engine_thread( + fn with_engine_send( &self, f: impl FnOnce(&Self::RawEngine) -> T + Send + 'static, ) -> T { diff --git a/src/runtimes/ruby.rs b/src/runtimes/ruby.rs index 7c4e7a8..31a0358 100644 --- a/src/runtimes/ruby.rs +++ b/src/runtimes/ruby.rs @@ -14,20 +14,20 @@ use bevy::{ tasks::futures_lite::io, }; use magnus::{ + DataType, DataTypeFunctions, IntoValue, Object, RClass, RModule, Ruby, TryConvert, TypedData, block::Proc, data_type_builder, function, value::{Lazy, ReprValue}, - DataType, DataTypeFunctions, IntoValue, Object, RClass, RModule, Ruby, TryConvert, TypedData, }; use magnus::{method, prelude::*}; -use rb_sys::{ruby_init_stack, VALUE}; +use rb_sys::{VALUE, ruby_init_stack}; use serde::Deserialize; use crate::{ + FuncArgs, Runtime, ScriptingError, assets::GetExtensions, callback::{FromRuntimeValueWithEngine, IntoRuntimeValueWithEngine}, promise::Promise, - FuncArgs, Runtime, ScriptingError, }; #[derive(Resource)] @@ -323,16 +323,14 @@ impl Runtime for RubyRuntime { type RawEngine = magnus::Ruby; - // TODO: it should be somehow possible to remove 'static here - fn with_engine_thread_mut( + fn with_engine_send_mut( &mut self, f: impl FnOnce(&mut Self::RawEngine) -> T + Send + 'static, ) -> T { self.execute_in_thread_mut(f) } - // TODO: it should be somehow possible to remove 'static here - fn with_engine_thread( + fn with_engine_send( &self, f: impl FnOnce(&Self::RawEngine) -> T + Send + 'static, ) -> T { @@ -374,14 +372,14 @@ impl Runtime for RubyRuntime { name: String, _arg_types: Vec, f: impl Fn( - Self::CallContext, - Vec, - ) -> Result< - crate::promise::Promise, - crate::ScriptingError, - > + Send - + Sync - + 'static, + Self::CallContext, + Vec, + ) -> Result< + crate::promise::Promise, + crate::ScriptingError, + > + Send + + Sync + + 'static, ) -> Result<(), crate::ScriptingError> { type CallbackClosure = Box< dyn Fn( diff --git a/tests/tests.rs b/tests/tests.rs index e39de94..904c469 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -6,7 +6,7 @@ use bevy::ecs::system::RunSystemOnce as _; #[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] use bevy::prelude::*; #[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] -use bevy_scriptum::{prelude::*, FuncArgs, Runtime}; +use bevy_scriptum::{FuncArgs, Runtime, prelude::*}; #[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] static TRACING_SUBSCRIBER: OnceLock<()> = OnceLock::new(); @@ -621,7 +621,7 @@ mod lua_tests { #[cfg(feature = "ruby")] mod ruby_tests { use bevy::prelude::*; - use bevy_scriptum::runtimes::ruby::{prelude::*, RubyScriptData}; + use bevy_scriptum::runtimes::ruby::{RubyScriptData, prelude::*}; use magnus::value::ReprValue; impl AssertStateKeyValue for RubyRuntime { @@ -630,7 +630,7 @@ mod ruby_tests { fn assert_state_key_value_i64(world: &World, _entity_id: Entity, key: &str, value: i64) { let runtime = world.get_resource::().unwrap(); let key = key.to_string(); - runtime.with_engine_thread(move |engine| { + runtime.with_engine_send(move |engine| { let state: magnus::value::Value = engine.eval("$state").unwrap(); let res: i64 = state.funcall_public("[]", (key,)).unwrap(); assert_eq!(res, value) @@ -640,7 +640,7 @@ mod ruby_tests { fn assert_state_key_value_i32(world: &World, _entity_id: Entity, key: &str, value: i32) { let runtime = world.get_resource::().unwrap(); let key = key.to_string(); - runtime.with_engine_thread(move |engine| { + runtime.with_engine_send(move |engine| { let state: magnus::value::Value = engine.eval("$state").unwrap(); let res: i32 = state.funcall_public("[]", (key,)).unwrap(); assert_eq!(res, value) @@ -656,7 +656,7 @@ mod ruby_tests { let runtime = world.get_resource::().unwrap(); let key = key.to_string(); let value = value.to_string(); - runtime.with_engine_thread(move |engine| { + runtime.with_engine_send(move |engine| { let state: magnus::value::Value = engine.eval("$state").unwrap(); let res: String = state.funcall_public("[]", (key,)).unwrap(); assert_eq!(res, value); @@ -670,7 +670,7 @@ mod ruby_tests { app.add_scripting::(|_| {}); let runtime = app.world().get_resource::().unwrap(); - runtime.with_engine_thread(|engine| { + runtime.with_engine_send(|engine| { let symbol_string: String = engine.eval(":test_symbol.inspect").unwrap(); assert_eq!(symbol_string, ":test_symbol") });