Skip to content

Commit 85e6e8a

Browse files
authored
perf(atoms): Remove temporary allocations in rkyv serialize and deserialize (#11202)
**Description:** Remove temporary allocations under serialize and deserialize.
1 parent 5298b86 commit 85e6e8a

File tree

2 files changed

+5
-12
lines changed

2 files changed

+5
-12
lines changed

crates/swc_atoms/src/lib.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ where
262262
<S as rancor::Fallible>::Error: rancor::Source,
263263
{
264264
fn serialize(&self, serializer: &mut S) -> Result<Self::Resolver, S::Error> {
265-
String::serialize(&self.to_string(), serializer)
265+
rkyv::string::ArchivedString::serialize_from_str(self.as_str(), serializer)
266266
}
267267
}
268268

@@ -272,10 +272,8 @@ impl<D> rkyv::Deserialize<Atom, D> for rkyv::string::ArchivedString
272272
where
273273
D: ?Sized + rancor::Fallible,
274274
{
275-
fn deserialize(&self, deserializer: &mut D) -> Result<Atom, <D as rancor::Fallible>::Error> {
276-
let s: String = self.deserialize(deserializer)?;
277-
278-
Ok(Atom::new(s))
275+
fn deserialize(&self, _: &mut D) -> Result<Atom, <D as rancor::Fallible>::Error> {
276+
Ok(Atom::new(self.as_str()))
279277
}
280278
}
281279

crates/swc_atoms/src/wtf8_atom.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,16 +197,11 @@ where
197197
D: ?Sized + rancor::Fallible,
198198
<D as rancor::Fallible>::Error: rancor::Source,
199199
{
200-
fn deserialize(
201-
&self,
202-
deserializer: &mut D,
203-
) -> Result<Wtf8Atom, <D as rancor::Fallible>::Error> {
204-
let s: Vec<u8> = self.deserialize(deserializer)?;
205-
200+
fn deserialize(&self, _: &mut D) -> Result<Wtf8Atom, <D as rancor::Fallible>::Error> {
206201
Ok(Wtf8Atom::new(
207202
// SAFETY: `ArchivedVec<u8>` is guaranteed to be serialized with `Wtf8Atom` byte
208203
// sequence. `Wtf8Atom` byte sequence is identical to `Wtf8` byte sequence.
209-
unsafe { Wtf8::from_bytes_unchecked(&s) },
204+
unsafe { Wtf8::from_bytes_unchecked(self.as_slice()) },
210205
))
211206
}
212207
}

0 commit comments

Comments
 (0)