1#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)]
5#[repr(u16)]
6#[non_exhaustive]
7pub enum Compression {
8 #[default]
10 Stored = 0,
11 Shrink = 1,
13 ReduceFactor1 = 2,
15 ReduceFactor2 = 3,
17 ReduceFactor3 = 4,
19 ReduceFactor4 = 5,
21 Implode = 6,
23 TokenizingCompression = 7,
25 Deflated = 8,
27 Deflate64 = 9,
29 PkwareDataCompressionImploding = 10,
31 Reserved11 = 11,
33 Bzip2 = 12,
35 Reserved13 = 13,
37 Lzma = 14,
39 Reserved15 = 15,
41 CmpscCompression = 16,
43 Reserved17 = 17,
45 IbmTerseNew = 18,
47 IbmLz77 = 19,
49 DeprecatedZstd = 20,
51 Zstd = 93,
53 Mp3 = 94,
55 Xz = 95,
57 Jpeg = 96,
59 WavPack = 97,
61 Ppmd = 98,
63 Aes = 99,
68 Unknown(u16),
70}
71
72impl From<u16> for Compression {
73 fn from(value: u16) -> Self {
74 match value {
75 0 => Self::Stored,
76 1 => Self::Shrink,
77 2 => Self::ReduceFactor1,
78 3 => Self::ReduceFactor2,
79 4 => Self::ReduceFactor3,
80 5 => Self::ReduceFactor4,
81 6 => Self::Implode,
82 7 => Self::TokenizingCompression,
83 8 => Self::Deflated,
84 9 => Self::Deflate64,
85 10 => Self::PkwareDataCompressionImploding,
86 11 => Self::Reserved11,
87 12 => Self::Bzip2,
88 13 => Self::Reserved13,
89 14 => Self::Lzma,
90 15 => Self::Reserved15,
91 16 => Self::CmpscCompression,
92 17 => Self::Reserved17,
93 18 => Self::IbmTerseNew,
94 19 => Self::IbmLz77,
95 20 => Self::DeprecatedZstd,
96 93 => Self::Zstd,
97 94 => Self::Mp3,
98 95 => Self::Xz,
99 96 => Self::Jpeg,
100 97 => Self::WavPack,
101 98 => Self::Ppmd,
102 99 => Self::Aes,
103 n => Self::Unknown(n),
104 }
105 }
106}
107
108impl From<Compression> for u16 {
109 fn from(value: Compression) -> Self {
110 match value {
111 Compression::Stored => 0,
112 Compression::Shrink => 1,
113 Compression::ReduceFactor1 => 2,
114 Compression::ReduceFactor2 => 3,
115 Compression::ReduceFactor3 => 4,
116 Compression::ReduceFactor4 => 5,
117 Compression::Implode => 6,
118 Compression::TokenizingCompression => 7,
119 Compression::Deflated => 8,
120 Compression::Deflate64 => 9,
121 Compression::PkwareDataCompressionImploding => 10,
122 Compression::Reserved11 => 11,
123 Compression::Bzip2 => 12,
124 Compression::Reserved13 => 13,
125 Compression::Lzma => 14,
126 Compression::Reserved15 => 15,
127 Compression::CmpscCompression => 16,
128 Compression::Reserved17 => 17,
129 Compression::IbmTerseNew => 18,
130 Compression::IbmLz77 => 19,
131 Compression::DeprecatedZstd => 20,
132 Compression::Zstd => 93,
133 Compression::Mp3 => 94,
134 Compression::Xz => 95,
135 Compression::Jpeg => 96,
136 Compression::WavPack => 97,
137 Compression::Ppmd => 98,
138 Compression::Aes => 99,
139 Compression::Unknown(value) => value,
140 }
141 }
142}
143
144impl Compression {
145 #[must_use]
147 pub fn as_u16(self) -> u16 {
148 u16::from(self)
149 }
150}