kwui_cli/
file_format.rs

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], // sha-1
56    pub fname: String,
57    pub reference: u16,
58    pub flags: u16,
59    pub offset: usize,
60    pub length: usize,
61}