sq3_rs/file_header/
user_version.rs

1use std::ops::Deref;
2
3use sq3_derive::Name;
4use sq3_parser::TypeName;
5
6use crate::{result::SqliteResult, traits::ParseBytes};
7
8/// # User version number (4 Bytes)
9///
10///  The 4-byte big-endian integer at offset 60 is the user version which is set
11/// and queried by the user_version pragma. The user version is not used by
12/// Sqlite.
13#[derive(Debug, Default, Name)]
14pub struct UserVersion(u32);
15impl Deref for UserVersion {
16    type Target = u32;
17
18    fn deref(&self) -> &Self::Target {
19        &self.0
20    }
21}
22
23impl ParseBytes for UserVersion {
24    const LENGTH_BYTES: usize = 4;
25
26    fn parsing_handler(bytes: &[u8]) -> SqliteResult<Self> {
27        let buf: [u8; Self::LENGTH_BYTES] = bytes.try_into()?;
28
29        let value = u32::from_be_bytes(buf);
30
31        Ok(Self(value))
32    }
33}