sofie_engine/asset/
precompressed.rs1use super::Asset;
2
3#[derive(Clone, Copy, Debug)]
4pub struct Precompressed {
5 pub brotli: &'static [u8],
6 pub gzip: &'static [u8],
7}
8
9impl Asset {
10 #[must_use]
11 pub const fn with_precompressed(mut self, precompressed: Precompressed) -> Self {
12 self.precompressed = Some(precompressed);
13 self
14 }
15
16 #[must_use]
17 pub const fn precompressed(&self) -> Option<Precompressed> {
18 self.precompressed
19 }
20}
21
22#[cfg(test)]
23mod tests {
24 use std::io::Read;
25
26 use crate::{CLIENT_SCRIPT, ENGINE_SCRIPT, STYLESHEET};
27
28 #[test]
29 fn each_engine_asset_decompresses_to_its_own_bytes() {
30 for asset in [CLIENT_SCRIPT, ENGINE_SCRIPT, STYLESHEET] {
31 let precompressed = asset.precompressed().unwrap();
32 let mut from_brotli = Vec::new();
33 brotli::Decompressor::new(precompressed.brotli, 4096)
34 .read_to_end(&mut from_brotli)
35 .unwrap();
36 let mut from_gzip = Vec::new();
37 flate2::read::GzDecoder::new(precompressed.gzip)
38 .read_to_end(&mut from_gzip)
39 .unwrap();
40
41 assert_eq!(from_brotli, asset.bytes);
42 assert_eq!(from_gzip, asset.bytes);
43 assert!(precompressed.brotli.len() < asset.bytes.len() / 2);
44 }
45 }
46}