1use std::borrow::Cow;
2
3use lz4_flex::block::{compress_prepend_size, decompress_size_prepended};
4
5use serde::{Deserialize, Serialize};
6use serde::{Deserializer, Serializer};
7
8pub fn serialize<S: Serializer>(v: &[u8], s: S) -> Result<S::Ok, S::Error> {
9 #[allow(deprecated)]
10 let base64 = base64::encode(compress_prepend_size(v));
11 String::serialize(&base64, s)
12}
13
14pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Cow<'static, [u8]>, D::Error> {
15 let base64 = String::deserialize(d)?;
16 #[allow(deprecated)]
17 let bytes = base64::decode(base64).map_err(serde::de::Error::custom)?;
18 decompress_size_prepended(&bytes)
19 .map_err(serde::de::Error::custom)
20 .map(|d| d.into())
21}