portable_audio_library/compression/
mod.rs1use crate::error::PortableAudioLibraryResult;
2use serde::{Deserialize, Serialize};
3use std::io::{Read, Write};
4
5pub mod gz;
6pub mod lz4;
7pub mod none;
8pub mod snap;
9
10#[derive(Debug, Clone, Default, PartialEq, PartialOrd, Serialize, Deserialize)]
12pub enum CompressionType {
13 #[default]
14 None,
15 Lz4(u32),
16 Snap,
17 Gz(u32),
18}
19
20pub trait Compression<R, W>
22where
23 R: Read,
24 W: Write,
25{
26 fn compress(&self, reader: &mut R, writer: &mut W) -> PortableAudioLibraryResult<()>;
28
29 fn decompress(&self, reader: &mut R, writer: &mut W) -> PortableAudioLibraryResult<()>;
31}
32
33pub fn get_compression<R, W>(compression_type: &CompressionType) -> Box<dyn Compression<R, W>>
35where
36 R: Read,
37 W: Write,
38{
39 match compression_type {
40 CompressionType::None => Box::new(none::None),
41 CompressionType::Lz4(level) => Box::new(lz4::Lz4(*level)),
42 CompressionType::Snap => Box::new(snap::Snap),
43 CompressionType::Gz(level) => Box::new(gz::Gz(*level)),
44 }
45}