sofie-engine 0.2.0

Screens: the template parser and renderer, and the component catalog.
Documentation
use super::Asset;

#[derive(Clone, Copy, Debug)]
pub struct Precompressed {
    pub brotli: &'static [u8],
    pub gzip: &'static [u8],
}

impl Asset {
    #[must_use]
    pub const fn with_precompressed(mut self, precompressed: Precompressed) -> Self {
        self.precompressed = Some(precompressed);
        self
    }

    #[must_use]
    pub const fn precompressed(&self) -> Option<Precompressed> {
        self.precompressed
    }
}

#[cfg(test)]
mod tests {
    use std::io::Read;

    use crate::{CLIENT_SCRIPT, ENGINE_SCRIPT, STYLESHEET};

    #[test]
    fn each_engine_asset_decompresses_to_its_own_bytes() {
        for asset in [CLIENT_SCRIPT, ENGINE_SCRIPT, STYLESHEET] {
            let precompressed = asset.precompressed().unwrap();
            let mut from_brotli = Vec::new();
            brotli::Decompressor::new(precompressed.brotli, 4096)
                .read_to_end(&mut from_brotli)
                .unwrap();
            let mut from_gzip = Vec::new();
            flate2::read::GzDecoder::new(precompressed.gzip)
                .read_to_end(&mut from_gzip)
                .unwrap();

            assert_eq!(from_brotli, asset.bytes);
            assert_eq!(from_gzip, asset.bytes);
            assert!(precompressed.brotli.len() < asset.bytes.len() / 2);
        }
    }
}