pub trait StateMigration {
type OldState;
type NewState;
// Required methods
fn from_version(&self) -> u32;
fn to_version(&self) -> u32;
fn migrate(&self, old: Self::OldState) -> Result<Self::NewState, String>;
}Expand description
A single-step migration from version N to version N+1.
Migrations are always forward-only and increment by exactly one version. This ensures a clear, auditable upgrade path.
§Example
ⓘ
// Migration from v1 ScrollState to v2 ScrollState (adds new field)
struct ScrollStateV1ToV2;
impl StateMigration for ScrollStateV1ToV2 {
type OldState = ScrollStateV1;
type NewState = ScrollStateV2;
fn from_version(&self) -> u32 { 1 }
fn to_version(&self) -> u32 { 2 }
fn migrate(&self, old: ScrollStateV1) -> Result<ScrollStateV2, String> {
Ok(ScrollStateV2 {
scroll_offset: old.scroll_offset,
scroll_velocity: 0.0, // New field, default value
})
}
}Required Associated Types§
Required Methods§
Sourcefn from_version(&self) -> u32
fn from_version(&self) -> u32
Source version this migration transforms from.
Sourcefn to_version(&self) -> u32
fn to_version(&self) -> u32
Target version this migration produces.
Must equal from_version() + 1.