use serde::{Deserialize, Serialize};
use crate::error::{PersistenceError, PersistenceResult};
pub const CURRENT_VERSION: u32 = 1;
pub const MIN_SUPPORTED_VERSION: u32 = 1;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
#[serde(transparent)]
pub struct SessionSchemaVersion(pub u32);
impl SessionSchemaVersion {
pub const CURRENT: Self = Self(CURRENT_VERSION);
pub fn validate(self) -> PersistenceResult<()> {
if self.0 < MIN_SUPPORTED_VERSION || self.0 > CURRENT_VERSION {
return Err(PersistenceError::SchemaVersionMismatch {
payload: self.0,
min: MIN_SUPPORTED_VERSION,
current: CURRENT_VERSION,
});
}
Ok(())
}
pub const fn raw(self) -> u32 {
self.0
}
}
impl Default for SessionSchemaVersion {
fn default() -> Self {
Self::CURRENT
}
}