sqlite_rs/header/
freelist_pages.rs1use crate::traits::ParseBytes;
2use crate::{impl_name, result::SqliteResult};
3use core::ops::Deref;
4
5#[derive(Debug, Default)]
8pub struct FreeListPages {
9 first: FreeListPagesFirstTrunkPage,
11 total: FreeListPagesTotalPages,
13}
14
15impl FreeListPages {
16 pub fn first(&self) -> &FreeListPagesFirstTrunkPage {
17 &self.first
18 }
19
20 pub fn total(&self) -> &FreeListPagesTotalPages {
21 &self.total
22 }
23}
24impl_name! {FreeListPages}
25
26impl ParseBytes for FreeListPages {
27 const LENGTH_BYTES: usize = 8;
28
29 fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
30 let first = FreeListPagesFirstTrunkPage::parse_bytes(&bytes[0..=3])?;
31 let total = FreeListPagesTotalPages::parse_bytes(&bytes[4..=7])?;
32
33 Ok(Self { first, total })
34 }
35}
36
37#[derive(Debug, Default)]
41pub struct FreeListPagesFirstTrunkPage(u32);
42impl Deref for FreeListPagesFirstTrunkPage {
43 type Target = u32;
44
45 fn deref(&self) -> &Self::Target {
46 &self.0
47 }
48}
49
50impl_name! {FreeListPagesFirstTrunkPage}
51
52impl ParseBytes for FreeListPagesFirstTrunkPage {
53 const LENGTH_BYTES: usize = 4;
54
55 fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
56 let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
57 let first_page_trunk = u32::from_be_bytes(buf);
58 Ok(Self(first_page_trunk))
59 }
60}
61
62#[derive(Debug, Default)]
65pub struct FreeListPagesTotalPages(u32);
66impl Deref for FreeListPagesTotalPages {
67 type Target = u32;
68
69 fn deref(&self) -> &Self::Target {
70 &self.0
71 }
72}
73
74impl_name! {FreeListPagesTotalPages}
75
76impl ParseBytes for FreeListPagesTotalPages {
77 const LENGTH_BYTES: usize = 4;
78
79 fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
80 let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
81 let total_pages = u32::from_be_bytes(buf);
82 Ok(Self(total_pages))
83 }
84}