1use num_enum::{TryFromPrimitive, IntoPrimitive};
2
3pub const FILE_MAGIC: [u8; 4] = ['K' as _, 'A' as _, 'r' as _, ' ' as _];
4pub const FILE_VERSION: u16 = 1;
5
6pub struct Header {
7 pub magic: [u8; 4],
8 pub version: u16,
9 pub flags: u16,
10 pub chunk_size: usize,
11 pub dir_count: usize,
12 pub file_count: usize,
13 pub nodes: Vec<Node>,
14 pub items: Vec<Item>,
15 pub chunks: Vec<Chunk>,
16}
17
18#[derive(Clone, Copy, TryFromPrimitive, IntoPrimitive)]
19#[repr(u16)]
20pub enum FileFlag {
21 Solid = 2,
22}
23
24#[derive(Clone, Copy, TryFromPrimitive, IntoPrimitive)]
25#[repr(u16)]
26pub enum ItemFlag {
27 Dir = 1,
28}
29
30#[derive(Clone)]
31pub struct Node {
32 pub ch: u16,
33 pub lokid: u16,
34 pub eqkid: u16,
35 pub hikid: u16,
36}
37
38#[derive(Debug, PartialEq, Eq, Clone, Copy, TryFromPrimitive, IntoPrimitive)]
39#[repr(u16)]
40pub enum AlgorithmType {
41 Store,
42 Lzf,
43}
44
45#[derive(Clone)]
46pub struct Chunk {
47 pub algorithm: AlgorithmType,
48 pub flags: u16,
49 pub length: usize,
50 pub compressed_length: usize,
51}
52
53#[derive(Clone)]
54pub struct Item {
55 pub digest: [u8; 20], pub fname: String,
57 pub reference: u16,
58 pub flags: u16,
59 pub offset: usize,
60 pub length: usize,
61}