use ix_schema::{Ix, assert_compatible};
#[derive(Ix)]
#[repr(C)]
struct EventV1 {
id: u32,
kind: u16,
}
#[derive(Ix)]
#[ix(version = 2, migrate_from = EventV1)]
#[repr(C)]
struct EventV2 {
id: u32,
kind: u16,
#[ix(since = 2, default = 0)]
flags: u16,
}
assert_compatible!(EventV2 : EventV1);
#[derive(Ix)]
#[repr(C)]
struct BadEvent {
kind: u16,
id: u32,
}
#[test]
fn append_only_extension_is_compatible() {
let ok = EventV2::MANIFEST.extends(&EventV1::MANIFEST);
assert!(ok);
}
#[test]
fn reordering_breaks_compatibility() {
const { assert!(!BadEvent::MANIFEST.extends(&EventV1::MANIFEST)) };
let broken = BadEvent::MANIFEST.extends(&EventV1::MANIFEST);
assert!(!broken);
}