1use crate::Be32;
2use core::{mem, slice};
3use plain::Plain;
4
5#[derive(Clone, Copy, Debug)]
6#[repr(packed)]
7pub struct File {
8 pub magic: [u8; 8],
9 pub len: Be32,
10 pub kind: Be32,
11 pub checksum: Be32,
12 pub offset: Be32,
13}
14
15impl File {
16 pub fn name(&self) -> &[u8] {
17 unsafe {
18 slice::from_raw_parts(
19 (self as *const Self as *const u8).add(mem::size_of::<Self>()),
20 u32::from(self.offset) as usize - mem::size_of::<Self>()
21 )
22 }
23 }
24
25 pub fn data(&self) -> &[u8] {
26 unsafe {
27 slice::from_raw_parts(
28 (self as *const Self as *const u8).add(u32::from(self.offset) as usize),
29 u32::from(self.len) as usize
30 )
31 }
32 }
33}
34
35unsafe impl Plain for File {}