Skip to main content

ferridriver_script/bindings/
disposable.rs

1//! QuickJS binding for `ferridriver::Disposable` — mirrors Playwright's
2//! `Disposable` / `DisposableStub` (`client/disposable.ts`). Returned from
3//! `page.route` / `page.addInitScript` (and context equivalents); `dispose()`
4//! reverses the registration, `remove()` is an alias.
5
6use crate::bindings::convert::FerriResultExt;
7use rquickjs::{JsLifetime, class::Trace};
8use std::sync::Arc;
9
10#[derive(JsLifetime, Trace)]
11#[rquickjs::class(rename = "Disposable")]
12pub struct DisposableJs {
13  #[qjs(skip_trace)]
14  inner: Arc<ferridriver::Disposable>,
15}
16
17impl DisposableJs {
18  #[must_use]
19  pub fn new(inner: ferridriver::Disposable) -> Self {
20    Self { inner: Arc::new(inner) }
21  }
22}
23
24#[rquickjs::methods]
25impl DisposableJs {
26  /// Reverse the registration. Idempotent — repeat calls are no-ops.
27  #[qjs(rename = "dispose")]
28  pub async fn dispose(&self) -> rquickjs::Result<()> {
29    let inner = Arc::clone(&self.inner);
30    inner.dispose().await.into_js()
31  }
32
33  /// Alias for `dispose()`.
34  #[qjs(rename = "remove")]
35  pub async fn remove(&self) -> rquickjs::Result<()> {
36    let inner = Arc::clone(&self.inner);
37    inner.dispose().await.into_js()
38  }
39}