///|
/// 每页字节数,固定 4096。
pub let page_size : Int32 = 4096

///|
let magic : Bytes = b"VELLUM\x01\x00"

///|
let format_version : UInt32 = 2U

///|
fn header_version(page : Bytes) -> UInt32 raise DbError {
  guard page.length() == page_size else { raise DbError::Corrupt }
  guard page[0:8] == magic[:] else { raise DbError::Corrupt }
  guard read_u32(page, 12) == page_size.reinterpret_as_uint() else {
    raise DbError::Corrupt
  }
  guard crc32(page[:header_len]) == read_u32(page, header_len) else {
    raise DbError::Corrupt
  }
  read_u32(page, 8)
}

///|
/// 单个 value 的字节上限。超过这个长度的 `put` 会抛 `DbError::ValueTooLarge`。
pub let max_value_len : Int32 = 4000

///|
let header_len : Int32 = 48