#[cfg(feature = "brotli")]
mod brotli {
use std::marker::PhantomData;
use brotli::enc::BrotliEncoderParams;
use crate::prelude::*;
pub struct Brotli<F>(PhantomData<F>);
impl<F> Default for Brotli<F> {
fn default() -> Self {
Self(PhantomData)
}
}
impl<F: Format> Format for Brotli<F> {
fn extension() -> &'static str {
".br"
}
fn serialize<W: std::io::prelude::Write, T: serde::Serialize>(
writer: W,
value: &T,
) -> Result<(), crate::Error> {
let params = BrotliEncoderParams::default();
let writer = brotli::CompressorWriter::with_params(writer, 4096, ¶ms);
F::serialize(writer, value)
}
fn deserialize<
R: std::io::prelude::Read,
S: for<'de> serde::de::DeserializeSeed<'de, Value = T>,
T,
>(
reader: R,
seed: S,
) -> Result<T, crate::Error> {
let reader = brotli::Decompressor::new(reader, 4096);
F::deserialize(reader, seed)
}
}
}
#[cfg(feature = "brotli")]
pub use brotli::Brotli;