lowell_core/formats/
initramfs.rs1use std::fmt;
2#[derive(serde::Serialize, Debug, PartialEq, Eq)]
3#[serde(rename_all = "lowercase")]
4pub enum Compression {
5 Gzip,
6 Xz,
7 Zstd,
8 Uncompressed,
9 Unknown,
10}
11
12impl fmt::Display for Compression {
13 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14 let s = match self {
15 Compression::Gzip => "gzip",
16 Compression::Xz => "xz",
17 Compression::Zstd => "zstd",
18 Compression::Uncompressed => "uncompressed",
19 Compression::Unknown => "unknown",
20 };
21 f.write_str(s)
22 }
23}
24
25#[inline]
26pub fn detect(bytes: &[u8]) -> Compression {
27 match bytes {
28 [0x1F, 0x8B, ..] => Compression::Gzip,
30
31 [0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00, ..] => Compression::Xz,
33
34 [0x28, 0xB5, 0x2F, 0xFD, ..] => Compression::Zstd,
36
37 [b'0', b'7', b'0', b'7', b'0', b'1', ..] => Compression::Uncompressed,
39
40 _ => Compression::Unknown,
42 }
43}