From b4f6aa97045424ee94f3d50d6e11946cc14bb377 Mon Sep 17 00:00:00 2001 From: Fabrizio Sestito Date: Sat, 21 Dec 2024 10:07:19 +0100 Subject: [PATCH] fix: resource impl Signed-off-by: Fabrizio Sestito --- native/rhai_rustler/src/ast.rs | 5 ++++- native/rhai_rustler/src/engine.rs | 5 ++++- native/rhai_rustler/src/lib.rs | 15 ++------------- native/rhai_rustler/src/scope.rs | 5 ++++- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/native/rhai_rustler/src/ast.rs b/native/rhai_rustler/src/ast.rs index 871b9c7..7465b85 100644 --- a/native/rhai_rustler/src/ast.rs +++ b/native/rhai_rustler/src/ast.rs @@ -1,12 +1,15 @@ use std::sync::Mutex; use rhai::AST; -use rustler::ResourceArc; +use rustler::{Resource, ResourceArc}; pub struct ASTResource { pub ast: Mutex, } +#[rustler::resource_impl] +impl Resource for ASTResource {} + #[rustler::nif] fn ast_empty() -> ResourceArc { ResourceArc::new(ASTResource { diff --git a/native/rhai_rustler/src/engine.rs b/native/rhai_rustler/src/engine.rs index 6b99d41..b122473 100644 --- a/native/rhai_rustler/src/engine.rs +++ b/native/rhai_rustler/src/engine.rs @@ -9,7 +9,7 @@ use rhai::{ use rhai_dylib::loader::{libloading::Libloading, Loader}; use rhai_dylib::module_resolvers::libloading::DylibModuleResolver; -use rustler::{Env, NifUnitEnum, ResourceArc, Term}; +use rustler::{Env, NifUnitEnum, Resource, ResourceArc, Term}; use crate::{ ast::ASTResource, @@ -29,6 +29,9 @@ pub struct EngineResource { pub engine: Mutex, } +#[rustler::resource_impl] +impl Resource for EngineResource {} + #[rustler::nif] fn engine_new() -> ResourceArc { let engine = Engine::new(); diff --git a/native/rhai_rustler/src/lib.rs b/native/rhai_rustler/src/lib.rs index 8485963..fb44820 100644 --- a/native/rhai_rustler/src/lib.rs +++ b/native/rhai_rustler/src/lib.rs @@ -7,11 +7,7 @@ mod types; use rhai::config::hashing::set_hashing_seed; use rustler::{Env, Term}; -use crate::ast::*; -use crate::engine::*; -use crate::scope::*; - -fn load(env: Env, _: Term) -> bool { +fn load(_: Env, _: Term) -> bool { // Set dylib ahash seed if let Err(value) = set_hashing_seed(Some([1, 3, 3, 7])) { eprintln!( @@ -21,14 +17,7 @@ fn load(env: Env, _: Term) -> bool { return false; } - let resources = [ - rustler::resource!(EngineResource, env), - rustler::resource!(ScopeResource, env), - rustler::resource!(ASTResource, env), - ]; - - // If any resource was not loaded correctly, return false - !resources.into_iter().any(|resource| !resource) + true } rustler::init!("Elixir.Rhai.Native", load = load); diff --git a/native/rhai_rustler/src/scope.rs b/native/rhai_rustler/src/scope.rs index 6c963ec..ef8798c 100644 --- a/native/rhai_rustler/src/scope.rs +++ b/native/rhai_rustler/src/scope.rs @@ -1,7 +1,7 @@ use std::sync::Mutex; use rhai::Scope; -use rustler::{Encoder, Env, ResourceArc, Term}; +use rustler::{Encoder, Env, Resource, ResourceArc, Term}; use crate::{ error::{RhaiRustlerError, ScopeError}, @@ -12,6 +12,9 @@ pub struct ScopeResource { pub scope: Mutex>, } +#[rustler::resource_impl] +impl Resource for ScopeResource {} + #[rustler::nif] fn scope_new() -> ResourceArc { ResourceArc::new(ScopeResource {