Skip to content

Commit 5cdf522

Browse files
committed
impl Serialize + GcDeserialize for GcCell
1 parent b1e8102 commit 5cdf522

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

src/serde.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ impl<'gc, T: Serialize, Id: CollectorId> Serialize for Gc<'gc, T, Id> {
8080
}
8181
}
8282

83-
8483
impl<'gc, T: Serialize, Id: CollectorId> Serialize for GcArray<'gc, T, Id> {
8584
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
8685
S: serde::Serializer {
@@ -106,6 +105,22 @@ impl<'gc, 'de, T, Id: CollectorId> GcDeserialize<'gc, 'de, Id> for PhantomData<T
106105
}
107106
}
108107

108+
impl<T: Serialize + Trace + Copy> Serialize for GcCell<T> {
109+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
110+
S: serde::Serializer {
111+
self.get().serialize(serializer)
112+
}
113+
}
114+
115+
impl<'gc, 'de, T, Id> GcDeserialize<'gc, 'de, Id> for GcCell<T>
116+
where T: Copy + GcDeserialize<'gc, 'de, Id>, Id: CollectorId {
117+
fn deserialize_gc<D: Deserializer<'de>>(ctx: &'gc Id::Context, deser: D) -> Result<Self, D::Error> {
118+
Ok(GcCell::new(T::deserialize_gc(ctx, deser)?))
119+
}
120+
}
121+
122+
123+
109124
impl<'gc, 'de, Id: CollectorId> GcDeserialize<'gc, 'de, Id> for () {
110125
fn deserialize_gc<D: Deserializer<'de>>(_ctx: &'gc Id::Context, deserializer: D) -> Result<Self, D::Error> {
111126

0 commit comments

Comments
 (0)