diff options
Diffstat (limited to 'ext/node/ops/zlib/mod.rs')
-rw-r--r-- | ext/node/ops/zlib/mod.rs | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/ext/node/ops/zlib/mod.rs b/ext/node/ops/zlib/mod.rs index 7eabc3f09..9e030176a 100644 --- a/ext/node/ops/zlib/mod.rs +++ b/ext/node/ops/zlib/mod.rs @@ -2,6 +2,8 @@ use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::op2; +use std::borrow::Cow; +use std::cell::RefCell; use zlib::*; mod alloc; @@ -228,17 +230,17 @@ impl ZlibInner { } struct Zlib { - inner: Option<ZlibInner>, + inner: RefCell<Option<ZlibInner>>, } -impl Zlib { - fn as_mut(&mut self) -> Option<&mut ZlibInner> { - self.inner.as_mut() +impl deno_core::GcResource for Zlib {} + +impl deno_core::Resource for Zlib { + fn name(&self) -> Cow<str> { + "zlib".into() } } -impl deno_core::GcResource for Zlib {} - #[op2] #[cppgc] pub fn op_zlib_new(#[smi] mode: i32) -> Result<Zlib, AnyError> { @@ -249,12 +251,15 @@ pub fn op_zlib_new(#[smi] mode: i32) -> Result<Zlib, AnyError> { ..Default::default() }; - Ok(Zlib { inner: Some(inner) }) + Ok(Zlib { + inner: RefCell::new(Some(inner)), + }) } #[op2(fast)] -pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> { - let zlib = zlib +pub fn op_zlib_close(#[cppgc] resource: &Zlib) -> Result<(), AnyError> { + let mut resource = resource.inner.borrow_mut(); + let zlib = resource .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -268,7 +273,7 @@ pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> { #[op2(fast)] #[smi] pub fn op_zlib_write( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, #[smi] flush: i32, #[buffer] input: &[u8], #[smi] in_off: u32, @@ -278,6 +283,7 @@ pub fn op_zlib_write( #[smi] out_len: u32, #[buffer] result: &mut [u32], ) -> Result<i32, AnyError> { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -295,13 +301,14 @@ pub fn op_zlib_write( #[op2(fast)] #[smi] pub fn op_zlib_init( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, #[smi] level: i32, #[smi] window_bits: i32, #[smi] mem_level: i32, #[smi] strategy: i32, #[buffer] dictionary: &[u8], ) -> Result<i32, AnyError> { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -341,7 +348,8 @@ pub fn op_zlib_init( #[op2(fast)] #[smi] -pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result<i32, AnyError> { +pub fn op_zlib_reset(#[cppgc] resource: &Zlib) -> Result<i32, AnyError> { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -353,9 +361,10 @@ pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result<i32, AnyError> { #[op2(fast)] pub fn op_zlib_close_if_pending( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, ) -> Result<(), AnyError> { let pending_close = { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -364,7 +373,7 @@ pub fn op_zlib_close_if_pending( zlib.pending_close }; if pending_close { - if let Some(mut res) = zlib.inner.take() { + if let Some(mut res) = resource.inner.borrow_mut().take() { let _ = res.close(); } } |