#![allow(clippy::needless_pass_by_value)]
use boa_engine::realm::Realm;
use boa_engine::value::TryFromJs;
use boa_engine::{Context, JsResult, JsValue, boa_module};
#[derive(Debug, Clone, TryFromJs)]
pub struct StructuredCloneOptions {
transfer: Option<Vec<JsValue>>,
}
#[boa_module]
pub mod js_module {
use super::StructuredCloneOptions;
use crate::store::JsValueStore;
use boa_engine::value::TryIntoJs;
use boa_engine::{Context, JsResult, JsValue};
pub fn structured_clone(
value: JsValue,
options: Option<StructuredCloneOptions>,
context: &mut Context,
) -> JsResult<JsValue> {
let v = JsValueStore::try_from_js(
&value,
context,
options.and_then(|o| o.transfer).unwrap_or_default(),
)?;
v.try_into_js(context)
}
}
pub fn register(realm: Option<Realm>, context: &mut Context) -> JsResult<()> {
js_module::boa_register(realm, context)
}