1use getset::CopyGetters;
2use std::fmt;
3
4use super::uint32_t;
5
6use scroll::Pread;
7
8#[derive(Debug, Pread, CopyGetters, Default)]
11#[get_copy = "pub"]
12pub struct Header {
13 magic: [u8; 8],
15 checksum: [u8; 4],
17 version: [u8; 4],
19 file_size: uint32_t,
21 foreign_off: uint32_t,
23 foreign_size: uint32_t,
25 classes_size: uint32_t,
27 class_idx_off: uint32_t,
29 num_lnps: uint32_t,
31 lnp_idx_off: uint32_t,
33 literalarrays_size: uint32_t,
35 literalarray_idx_off: uint32_t,
37 region_size: uint32_t,
39 region_off: uint32_t,
41}
42
43impl fmt::Display for Header {
44 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45 let magic = String::from_utf8_lossy(&self.magic);
46 let version = self
47 .version
48 .iter()
49 .map(|x| x.to_string())
50 .collect::<Vec<_>>()
51 .join(".");
52
53 write!(
54 f,
55 "
56magic: {}
57checksum: {:?}
58版本: {}
59文件大小: {}
60外部区域偏移: {}
61外部区域大小: {}
62类的数量: {}
63类索引的偏移: {}
64行号索引数量: {}
65行号索引偏移: {}
66字面量数组的数量: {}
67字面量数组的偏移: {}
68索引头的数量: {}
69索引头的偏移: {}
70",
71 magic,
72 self.checksum,
73 version,
74 self.file_size,
75 self.foreign_off,
76 self.foreign_size,
77 self.classes_size,
78 self.class_idx_off,
79 self.num_lnps,
80 self.lnp_idx_off,
81 self.literalarrays_size,
82 self.literalarray_idx_off,
83 self.region_size,
84 self.region_off,
85 )
86 }
87}