stream_unpack/zip/structures/
mod.rs1use thiserror::Error;
2
3use crate::decompress::Decompressor;
4
5#[cfg(feature = "deflate")]
6use crate::decompress::deflate::DeflateDecompressor;
7
8pub mod cd_location;
10
11pub mod file_header;
13
14pub mod central_directory;
16
17pub mod local_file_header;
19
20#[derive(Error, Debug)]
21pub enum DecompressorCreationError {
22 #[error("unknown compression method: {0}")]
23 UnknownMethod(u16)
24}
25
26#[derive(Debug, Clone)]
29pub enum CompressionMethod {
30 #[cfg(feature = "deflate")]
31 Deflate,
32
33 Unknown(u16)
34}
35
36impl CompressionMethod {
37 pub fn from_id(id: u16) -> Option<Self> {
42 match id {
43 0 => None,
44
45 #[cfg(feature = "deflate")]
46 8 => Some(Self::Deflate),
47
48 _ => Some(Self::Unknown(id))
49 }
50 }
51
52 pub fn create_decompressor(&self) -> Result<Box<dyn Decompressor>, DecompressorCreationError> {
56 match self {
57 #[cfg(feature = "deflate")]
58 Self::Deflate => Ok(Box::new(DeflateDecompressor::new())),
59
60 Self::Unknown(id) => Err(DecompressorCreationError::UnknownMethod(*id))
61 }
62 }
63
64 pub fn is_supported(&self) -> bool {
66 !(matches!(self, Self::Unknown(..)))
67 }
68}