1pub mod crypto;
8pub mod error;
9pub mod header;
10pub mod parser;
11pub mod rar4;
12pub mod rar5;
13
14pub use error::{RarError, Result};
15pub use header::{ArchiveHeader, EndArchiveHeader, FileHeader, RarHeader, ServiceHeader};
16pub use parser::{parse_all_headers, parse_headers};
17
18pub const RAR4_MAGIC: &[u8] = &[0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x00];
20
21pub const RAR5_MAGIC: &[u8] = &[0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x01, 0x00];
23
24pub fn detect_version(header: &[u8]) -> Option<RarVersion> {
25 if header.len() >= RAR5_MAGIC.len() && header[..RAR5_MAGIC.len()] == *RAR5_MAGIC {
26 Some(RarVersion::Rar5)
27 } else if header.len() >= RAR4_MAGIC.len() && header[..RAR4_MAGIC.len()] == *RAR4_MAGIC {
28 Some(RarVersion::Rar4)
29 } else {
30 None
31 }
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35pub enum RarVersion {
36 Rar4,
37 Rar5,
38}