script_bindings/
serializable.rs1use js::context::{JSContext, NoGC};
6use rustc_hash::FxHashMap;
7use servo_base::id::NamespaceIndex;
8
9use crate::DomTypes;
10use crate::reflector::DomObject;
11use crate::root::DomRoot;
12use crate::structuredclone::{MarkedAsSerializableInIdl, StructuredData};
13
14#[allow(clippy::result_unit_err)]
17pub trait Serializable<D: DomTypes>: DomObject + MarkedAsSerializableInIdl
18where
19 Self: Sized,
20{
21 type Index: Copy + Eq + std::hash::Hash;
22 type Data;
23
24 fn serialize(&self, no_gc: &NoGC) -> Result<(NamespaceIndex<Self::Index>, Self::Data), ()>;
26
27 fn deserialize(
29 cx: &mut JSContext,
30 owner: &D::GlobalScope,
31 serialized: Self::Data,
32 ) -> Result<DomRoot<Self>, ()>
33 where
34 Self: Sized;
35
36 fn serialized_storage<'a>(
39 data: StructuredData<'a, '_>,
40 ) -> &'a mut Option<FxHashMap<NamespaceIndex<Self::Index>, Self::Data>>;
41}