arsc/writer/
with_header.rs1use super::components_sizing::ByteSizing;
2use crate::components::{Arsc, Config, Header, Package, ResourceType, Specs, StringPool};
3
4pub(in crate::writer) trait WithHeader: ByteSizing {
7 fn get_header_size(&self) -> u16;
9 const RESOURCE_TYPE: ResourceType;
11
12 fn header(&self) -> Header {
14 Header {
15 resource_type: Self::RESOURCE_TYPE,
16 header_size: self.get_header_size(),
17 size: self.size() as u64,
18 }
19 }
20}
21
22impl WithHeader for Arsc {
23 fn get_header_size(&self) -> u16 {
24 0x000C
25 }
26 const RESOURCE_TYPE: ResourceType = ResourceType::Table;
27}
28
29impl WithHeader for StringPool {
30 fn get_header_size(&self) -> u16 {
31 0x001C
32 }
33 const RESOURCE_TYPE: ResourceType = ResourceType::StringPool;
34}
35
36impl WithHeader for Package {
37 fn get_header_size(&self) -> u16 {
38 0x0120
39 }
40 const RESOURCE_TYPE: ResourceType = ResourceType::TablePackage;
41}
42
43impl WithHeader for Specs {
44 fn get_header_size(&self) -> u16 {
45 self.header_size
46 }
47 const RESOURCE_TYPE: ResourceType = ResourceType::TableTypeSpec;
48}
49
50impl WithHeader for Config {
51 fn get_header_size(&self) -> u16 {
52 self.header_size
53 }
54
55 const RESOURCE_TYPE: ResourceType = ResourceType::TableType;
56}