1#![no_std]
2extern crate alloc;
3
4use core::mem;
5
6use bitflags::bitflags;
7
8pub use dryoc::{
9 self,
10 classic::crypto_sign_ed25519::{PublicKey, SecretKey, Signature},
11};
12
13pub use bytemuck::Zeroable;
14
15pub use crate::entry::Entry;
16pub use crate::error::Error;
17pub use crate::flags::{Architecture, DataVersion, HeaderFlags, Packaging};
18pub use crate::header::Header;
19pub use crate::package::{PackageBuf, PackageSrc};
20
21mod entry;
22mod error;
23mod flags;
24mod header;
25mod package;
26
27pub const HEADER_SIZE: usize = mem::size_of::<Header>();
28pub const ENTRY_SIZE: usize = mem::size_of::<Entry>();
29
30bitflags! {
31 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
33 pub struct Mode: u32 {
34 const PERM = 0o007777;
35 const KIND = 0o170000;
36 const FILE = 0o100000;
37 const SYMLINK = 0o120000;
38 }
39}
40
41impl Mode {
42 pub fn kind(self) -> Mode {
44 self & Mode::KIND
45 }
46
47 pub fn perm(self) -> Mode {
49 self & Mode::PERM
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use core::mem;
56
57 use crate::{Entry, Header, ENTRY_SIZE, HEADER_SIZE};
58
59 #[test]
60 fn header_size() {
61 assert_eq!(mem::size_of::<Header>(), 136);
62 assert_eq!(HEADER_SIZE, 136);
63 }
64
65 #[test]
66 fn entry_size() {
67 assert_eq!(mem::size_of::<Entry>(), 308);
68 assert_eq!(ENTRY_SIZE, 308);
69 }
70}