Skip to main content

CompatibilityVerdict

Enum CompatibilityVerdict 

Source
pub enum CompatibilityVerdict {
    Identical,
    WireCompatible,
    AppendSafe,
    MigrationRequired,
    Incompatible,
}
Expand description

Unified compatibility verdict between two layout versions.

Replaces ad-hoc boolean checks with a single, ranked classification. The ordering is from least disruptive to most disruptive.

Variants§

§

Identical

Layouts are byte-identical (same layout_id).

§

WireCompatible

Same wire layout (field count, sizes, offsets, types all match) but layout_id differs. Semantic metadata changed (e.g. field intent, layout name). Safe to read, no migration needed.

§

AppendSafe

Same discriminator, old field prefix intact in new layout. Old readers can still parse new accounts (they ignore the tail). Covers both strict append (new fields only at the end) and prefix-preserving changes. No forced migration required.

§

MigrationRequired

Breaking change: field types changed, fields removed, or prefix altered. Full migration required before deploying new code.

§

Incompatible

Different discriminators. These are fundamentally different types.

Implementations§

Source§

impl CompatibilityVerdict

Source

pub fn between(older: &LayoutManifest, newer: &LayoutManifest) -> Self

Compute the verdict for a version transition.

Source

pub const fn name(self) -> &'static str

Human-readable name.

Source

pub const fn is_safe(self) -> bool

Whether the transition is safe without any migration.

Source

pub const fn is_backward_readable(self) -> bool

Whether old readers can still parse accounts written by the new layout.

Source

pub const fn requires_migration(self) -> bool

Whether a migration instruction is required.

Source

pub fn refine_with_roles<const N: usize>( self, report: &SegmentMigrationReport<N>, ) -> Self

Refine a verdict using segment-role information.

The base between() is field-level only. When a segmented account has role metadata, this method can soften or escalate:

  • A MigrationRequired verdict is softened to AppendSafe when all changed segments are clearable or rebuildable (Cache, Index, Journal). Core / Audit / Extension changes stay breaking.

  • An AppendSafe verdict is escalated to MigrationRequired when any modified segment is immutable-after-init (Audit).

Trait Implementations§

Source§

impl Clone for CompatibilityVerdict

Source§

fn clone(&self) -> CompatibilityVerdict

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompatibilityVerdict

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for CompatibilityVerdict

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for CompatibilityVerdict

Source§

fn eq(&self, other: &CompatibilityVerdict) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CompatibilityVerdict

Source§

impl Eq for CompatibilityVerdict

Source§

impl StructuralPartialEq for CompatibilityVerdict

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.