Skip to main content

blosc2_pure_rs/
lib.rs

1pub mod b2nd;
2pub mod codecs;
3pub mod compress;
4pub mod constants;
5pub mod filters;
6pub mod header;
7pub mod schunk;
8
9/// Codec identifiers matching the C library constants.
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum Codec {
12    BloscLz = 0,
13    Lz4 = 1,
14    Lz4hc = 2,
15    Zlib = 4,
16    Zstd = 5,
17}
18
19impl Codec {
20    pub fn parse_name(s: &str) -> Option<Self> {
21        match s.to_lowercase().as_str() {
22            "blosclz" => Some(Codec::BloscLz),
23            "lz4" => Some(Codec::Lz4),
24            "lz4hc" => Some(Codec::Lz4hc),
25            "zlib" => Some(Codec::Zlib),
26            "zstd" => Some(Codec::Zstd),
27            _ => None,
28        }
29    }
30}
31
32impl std::str::FromStr for Codec {
33    type Err = ();
34
35    fn from_str(s: &str) -> Result<Self, Self::Err> {
36        Self::parse_name(s).ok_or(())
37    }
38}
39
40/// Filter identifiers matching the C library constants.
41#[derive(Debug, Clone, Copy, PartialEq, Eq)]
42pub enum Filter {
43    NoFilter = 0,
44    Shuffle = 1,
45    BitShuffle = 2,
46    Delta = 3,
47    TruncPrec = 4,
48}
49
50impl Filter {
51    pub fn parse_name(s: &str) -> Option<Self> {
52        match s.to_lowercase().as_str() {
53            "nofilter" | "none" => Some(Filter::NoFilter),
54            "shuffle" => Some(Filter::Shuffle),
55            "bitshuffle" => Some(Filter::BitShuffle),
56            "delta" => Some(Filter::Delta),
57            "truncprec" | "trunc_prec" => Some(Filter::TruncPrec),
58            _ => None,
59        }
60    }
61}
62
63impl std::str::FromStr for Filter {
64    type Err = ();
65
66    fn from_str(s: &str) -> Result<Self, Self::Err> {
67        Self::parse_name(s).ok_or(())
68    }
69}
70
71/// Default chunk size used for file compression (4 MiB).
72pub const DEFAULT_CHUNKSIZE: usize = 4 * 1024 * 1024;