use crate::traits::ParseBytes;
use crate::{impl_name, result::SqliteResult};
use core::ops::Deref;
#[derive(Debug, Default)]
pub struct IncrementalVacuumSettings {
pub largest_root_btree_page: LargestRootBtreePage,
pub incremental_vacuum_mode: IncrementalVacuumMode,
}
impl IncrementalVacuumSettings {
pub fn largest_root_btree_page(&self) -> &LargestRootBtreePage {
&self.largest_root_btree_page
}
pub fn incremental_vacuum_mode(&self) -> &IncrementalVacuumMode {
&self.incremental_vacuum_mode
}
}
#[derive(Debug, Default)]
pub struct LargestRootBtreePage(u32);
impl Deref for LargestRootBtreePage {
type Target = u32;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl_name! {LargestRootBtreePage}
impl ParseBytes for LargestRootBtreePage {
const LENGTH_BYTES: usize = 4;
fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
let value = u32::from_be_bytes(buf);
Ok(Self(value))
}
}
#[derive(Debug, Default)]
pub enum IncrementalVacuumMode {
#[default]
False,
True,
}
impl From<&IncrementalVacuumMode> for bool {
fn from(value: &IncrementalVacuumMode) -> Self {
match value {
IncrementalVacuumMode::True => true,
IncrementalVacuumMode::False => false,
}
}
}
impl From<&IncrementalVacuumMode> for u32 {
fn from(value: &IncrementalVacuumMode) -> Self {
match value {
IncrementalVacuumMode::True => 1,
IncrementalVacuumMode::False => 0,
}
}
}
impl_name! {IncrementalVacuumMode}
impl ParseBytes for IncrementalVacuumMode {
const LENGTH_BYTES: usize = 4;
fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
let number = u32::from_be_bytes(buf);
let value = if number > 0 { Self::True } else { Self::False };
Ok(value)
}
}