diff --git a/native/zenohex_nif/src/lib.rs b/native/zenohex_nif/src/lib.rs index 6422ab7..642f4bd 100644 --- a/native/zenohex_nif/src/lib.rs +++ b/native/zenohex_nif/src/lib.rs @@ -1,7 +1,7 @@ use std::sync::{Arc, RwLock}; use flume::Receiver; -use rustler::{Env, ResourceArc, Term}; +use rustler::{Env, Resource, ResourceArc, Term}; use zenoh::{ prelude::sync::*, publication::Publisher, query::Reply, queryable::Query, queryable::Queryable, sample::Sample, subscriber::PullSubscriber, subscriber::Subscriber, Session, @@ -33,6 +33,15 @@ struct ReplyReceiverRef(Receiver); struct QueryRef(RwLock>); struct SampleRef(Sample); +impl Resource for SessionRef {} +impl Resource for PublisherRef {} +impl Resource for SubscriberRef {} +impl Resource for PullSubscriberRef {} +impl Resource for QueryableRef {} +impl Resource for ReplyReceiverRef {} +impl Resource for QueryRef {} +impl Resource for SampleRef {} + #[rustler::nif(schedule = "DirtyIo")] fn zenoh_open(config: crate::config::ExConfig) -> Result, String> { let config: zenoh::prelude::config::Config = config.into(); @@ -43,14 +52,14 @@ fn zenoh_open(config: crate::config::ExConfig) -> Result } fn load(env: Env, _term: Term) -> bool { - rustler::resource!(SessionRef, env); - rustler::resource!(PublisherRef, env); - rustler::resource!(SubscriberRef, env); - rustler::resource!(PullSubscriberRef, env); - rustler::resource!(QueryableRef, env); - rustler::resource!(ReplyReceiverRef, env); - rustler::resource!(QueryRef, env); - rustler::resource!(SampleRef, env); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); + env.register::().unwrap(); true }