Skip to main content

nzbdav_rar/
header.rs

1//! RAR header types shared between RAR4 and RAR5 parsers.
2
3#[derive(Debug, Clone)]
4pub enum RarHeader {
5    Archive(ArchiveHeader),
6    File(FileHeader),
7    EndArchive(EndArchiveHeader),
8    Service(ServiceHeader),
9}
10
11#[derive(Debug, Clone)]
12pub struct ArchiveHeader {
13    pub is_first_volume: bool,
14    pub volume_number: Option<i32>,
15}
16
17#[derive(Debug, Clone)]
18pub struct FileHeader {
19    pub filename: String,
20    pub uncompressed_size: u64,
21    pub compressed_size: u64,
22    pub compression_method: u8,
23    /// Offset in the stream where file data begins.
24    pub data_start_position: u64,
25    /// Size of the data region (= compressed_size for m0/store).
26    pub data_size: u64,
27    pub is_directory: bool,
28    pub is_encrypted: bool,
29    pub is_solid: bool,
30    pub volume_number: Option<i32>,
31    pub encryption: Option<RarEncryption>,
32}
33
34#[derive(Debug, Clone)]
35pub struct EndArchiveHeader {
36    pub volume_number: Option<i32>,
37}
38
39#[derive(Debug, Clone)]
40pub struct ServiceHeader {
41    pub name: String,
42    pub data_size: u64,
43}
44
45#[derive(Debug, Clone)]
46pub enum RarEncryption {
47    Rar4 {
48        salt: [u8; 8],
49    },
50    Rar5 {
51        lg2_count: u8,
52        salt: Vec<u8>,
53        use_psw_check: bool,
54        psw_check: Vec<u8>,
55        iv: Vec<u8>,
56    },
57}