Skip to content

Commit e1c9add

Browse files
committed
Add unsafe variant
1 parent 70578c2 commit e1c9add

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

rustler/src/resource.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -144,22 +144,26 @@ where
144144
}
145145
}
146146

147-
pub fn make_binary<'env, F>(&self, env: Env<'env>, f: F) -> Binary<'env>
147+
pub fn make_binary<'env, 'a, F>(&self, env: Env<'env>, f: F) -> Binary<'env>
148148
where
149-
F: FnOnce(&T) -> &[u8],
149+
F: FnOnce(&'a T) -> &'a [u8],
150150
{
151-
let term = unsafe {
152-
let bin = f(&*self.inner);
153-
let binary = rustler_sys::enif_make_resource_binary(
154-
env.as_c_arg(),
155-
self.raw,
156-
bin.as_ptr() as *const c_void,
157-
bin.len(),
158-
);
151+
unsafe { self.make_binary_unsafe(env, f) }
152+
}
159153

160-
Term::new(env, binary)
161-
};
154+
pub unsafe fn make_binary_unsafe<'env, 'a, 'b, F>(&self, env: Env<'env>, f: F) -> Binary<'env>
155+
where
156+
F: FnOnce(&'a T) -> &'b [u8],
157+
{
158+
let bin = f(&*self.inner);
159+
let binary = rustler_sys::enif_make_resource_binary(
160+
env.as_c_arg(),
161+
self.raw,
162+
bin.as_ptr() as *const c_void,
163+
bin.len(),
164+
);
162165

166+
let term = Term::new(env, binary);
163167
Binary::from_term(term).unwrap()
164168
}
165169

0 commit comments

Comments
 (0)