Skip to main content

ferrijs_std/utils/
clone.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3use rquickjs::{class::JsClass, Class, Ctx, Object, Result, Value};
4
5pub trait StructuredClone<'js>: JsClass<'js> {
6    fn structured_clone(&self, ctx: &Ctx<'js>) -> Result<Value<'js>>;
7}
8
9pub fn clone_platform_object<'js, T>(
10    ctx: &Ctx<'js>,
11    object: &Object<'js>,
12) -> Result<Option<Value<'js>>>
13where
14    T: StructuredClone<'js>,
15{
16    if let Some(class) = Class::<T>::from_object(object) {
17        return Ok(Some(class.borrow().structured_clone(ctx)?));
18    }
19    Ok(None)
20}