1use crate::error::Result;
4use serde::{Deserialize, Serialize};
5
6pub trait Storable: Sized {
8 fn to_bytes(&self) -> Result<Vec<u8>>;
10
11 fn from_bytes(bytes: &[u8]) -> Result<Self>;
13
14 const MAX_SIZE: u32;
16
17 const FIXED_SIZE: Option<u32> = None;
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct StateVersion {
24 pub version: u32,
25 pub created_at: u64,
26}
27
28pub trait Migratable: Storable {
30 fn current_version() -> u32;
32
33 fn migrate_from(version: u32, data: &[u8]) -> Result<Self>;
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct StateMetadata {
40 pub version: StateVersion,
41 pub size_bytes: u64,
42 pub last_modified: u64,
43}