Skip to main content

StateMigration

Trait StateMigration 

Source
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§

Source

type OldState

The state type before migration.

Source

type NewState

The state type after migration.

Required Methods§

Source

fn from_version(&self) -> u32

Source version this migration transforms from.

Source

fn to_version(&self) -> u32

Target version this migration produces. Must equal from_version() + 1.

Source

fn migrate(&self, old: Self::OldState) -> Result<Self::NewState, String>

Perform the migration.

Returns Err with a message if the migration cannot be performed.

Implementors§