pointer: Option<u64>,
metaprotocol: Option<String>,
metadata: Option<Vec<u8>>,
compress: bool,
) -> Result<Self, Error> {
let path = path.as_ref();
let body = fs::read(path).with_context(|| format!("io error reading {}", path.display()))?;
let (content_type, compression_mode) = Media::content_type_for_path(path)?;
let (body, content_encoding) = if compress {
let mut compressed = Vec::new();
{
CompressorWriter::with_params(
&mut compressed,
body.len(),
&BrotliEncoderParams {
lgblock: 24,
lgwin: 24,
mode: compression_mode,
quality: 11,
size_hint: body.len(),
..Default::default()
},
)
.write_all(&body)?;
let mut decompressor = brotli::Decompressor::new(compressed.as_slice(), compressed.len());
let mut decompressed = Vec::new();
decompressor.read_to_end(&mut decompressed)?;
ensure!(decompressed == body, "decompression roundtrip failed");