1use std::borrow::Cow;
2
3use serde::{Deserialize, Serialize};
4
5pub struct Arm7<'a> {
7 data: Cow<'a, [u8]>,
8 offsets: Arm7Offsets,
9}
10
11#[derive(Serialize, Deserialize)]
13pub struct Arm7Offsets {
14 pub base_address: u32,
16 pub entry_function: u32,
18 pub build_info: u32,
20 pub autoload_callback: u32,
22}
23
24impl<'a> Arm7<'a> {
25 pub fn new<T: Into<Cow<'a, [u8]>>>(data: T, offsets: Arm7Offsets) -> Self {
27 Self { data: data.into(), offsets }
28 }
29
30 pub fn full_data(&self) -> &[u8] {
32 &self.data
33 }
34
35 pub fn base_address(&self) -> u32 {
37 self.offsets.base_address
38 }
39
40 pub fn entry_function(&self) -> u32 {
42 self.offsets.entry_function
43 }
44
45 pub fn build_info_offset(&self) -> u32 {
47 self.offsets.build_info
48 }
49
50 pub fn autoload_callback(&self) -> u32 {
52 self.offsets.autoload_callback
53 }
54
55 pub fn offsets(&self) -> &Arm7Offsets {
57 &self.offsets
58 }
59}