Skip to content

Commit

Permalink
perf(db): use encode_to in Scale implementations (#11297)
Browse files Browse the repository at this point in the history
  • Loading branch information
DaniPopes committed Sep 27, 2024
1 parent bf18fd9 commit e962983
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion crates/storage/db-api/src/scale.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ where
}

fn compress_to_buf<B: bytes::BufMut + AsMut<[u8]>>(self, buf: &mut B) {
buf.put_slice(&parity_scale_codec::Encode::encode(&self))
parity_scale_codec::Encode::encode_to(&self, OutputCompat::wrap_mut(buf));
}
}

Expand Down Expand Up @@ -50,3 +50,22 @@ impl sealed::Sealed for Vec<u8> {}

impl_compression_for_scale!(U256);
impl_compression_for_scale!(u8, u32, u16, u64);

#[repr(transparent)]
struct OutputCompat<B>(B);

impl<B> OutputCompat<B> {
fn wrap_mut(buf: &mut B) -> &mut Self {
unsafe { std::mem::transmute(buf) }
}
}

impl<B: bytes::BufMut> parity_scale_codec::Output for OutputCompat<B> {
fn write(&mut self, bytes: &[u8]) {
self.0.put_slice(bytes);
}

fn push_byte(&mut self, byte: u8) {
self.0.put_u8(byte);
}
}

0 comments on commit e962983

Please sign in to comment.