sq3_rs/file_header/
incremental_vacuum_settings.rs1use std::ops::Deref;
2
3use sq3_derive::Name;
4use sq3_parser::TypeName;
5
6use crate::{result::SqliteResult, traits::ParseBytes};
7
8#[derive(Debug, Default, Name)]
21pub struct IncrementalVacuumSettings {
22 pub largest_root_btree_page: LargestRootBtreePage,
23 pub incremental_vacuum_mode: IncrementalVacuumMode,
24}
25
26impl IncrementalVacuumSettings {
32 pub fn largest_root_btree_page(&self) -> &LargestRootBtreePage {
33 &self.largest_root_btree_page
34 }
35
36 pub fn incremental_vacuum_mode(&self) -> &IncrementalVacuumMode {
37 &self.incremental_vacuum_mode
38 }
39}
40
41#[derive(Debug, Default, Name)]
45pub struct LargestRootBtreePage(u32);
46
47impl Deref for LargestRootBtreePage {
48 type Target = u32;
49
50 fn deref(&self) -> &Self::Target {
51 &self.0
52 }
53}
54
55impl ParseBytes for LargestRootBtreePage {
56 const LENGTH_BYTES: usize = 4;
57
58 fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
59 let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
60
61 let value = u32::from_be_bytes(buf);
62
63 Ok(Self(value))
64 }
65}
66
67#[derive(Debug, Default, Name)]
70pub enum IncrementalVacuumMode {
71 #[default]
72 False,
73 True,
74}
75impl From<&IncrementalVacuumMode> for bool {
76 fn from(value: &IncrementalVacuumMode) -> Self {
77 match value {
78 IncrementalVacuumMode::True => true,
79 IncrementalVacuumMode::False => false,
80 }
81 }
82}
83impl From<&IncrementalVacuumMode> for u32 {
84 fn from(value: &IncrementalVacuumMode) -> Self {
85 match value {
86 IncrementalVacuumMode::True => 1,
87 IncrementalVacuumMode::False => 0,
88 }
89 }
90}
91
92impl ParseBytes for IncrementalVacuumMode {
93 const LENGTH_BYTES: usize = 4;
94
95 fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
96 let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
97
98 let number = u32::from_be_bytes(buf);
99 let value = if number > 0 { Self::True } else { Self::False };
100
101 Ok(value)
102 }
103}