fix(typedef): remove unintended TypeDef:Uint64 from the engine
TypeDef:Uint64 was never specified in any ADR and was a partial, incomplete addition: type_size() returned None (so is_fixed_size() was false), OffsetMap::compute rejected it, LayoutBuilder::build would unreachable!() panic on it, and the validator did not register a TypeDef:Uint64 keyword. Only the SequentialReader path worked, and only because it dispatched directly to data_access::read_u64 without consulting type_size(). Remove the variant from TypeDefKind, the read_u64/write_u64 primitives, FieldValue::U64, the sequential-reader and engine dispatch arms, and the associated tests. The engine now has exactly 17 first-class kinds, matching the spec. All 286 tests pass; the workspace builds clean.
This commit is contained in:
1 parent
ce7ef1e31f
commit
14d9cf281f
5 files changed
+5
-50
No files matched your search
@@ -121,7 +121,6 @@ define_read_write_endian!(i32, read_i32, write_i32, 4);
|
||||
define_read_write_ne!(u8, read_u8, write_u8, 1, |bytes: [u8; 1]| bytes[0]);
|
||||
define_read_write_endian!(u16, read_u16, write_u16, 2);
|
||||
define_read_write_endian!(u32, read_u32, write_u32, 4);
|
||||
define_read_write_endian!(u64, read_u64, write_u64, 8);
|
||||
define_read_write_endian!(f32, read_f32, write_f32, 4);
|
||||
define_read_write_endian!(f64, read_f64, write_f64, 8);
|
||||
|
||||
@@ -407,18 +406,6 @@ mod tests {
|
||||
assert_eq!(read_i32(&buf, 0, "f", BE).unwrap(), i32::MIN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_write_u64_endianness() {
|
||||
let mut buf = [0u8; 8];
|
||||
write_u64(&mut buf, 0, 0x0102030405060708, "f", LE).unwrap();
|
||||
assert_eq!(buf, [0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01]);
|
||||
assert_eq!(read_u64(&buf, 0, "f", LE).unwrap(), 0x0102030405060708);
|
||||
|
||||
write_u64(&mut buf, 0, 0x0102030405060708, "f", BE).unwrap();
|
||||
assert_eq!(buf, [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]);
|
||||
assert_eq!(read_u64(&buf, 0, "f", BE).unwrap(), 0x0102030405060708);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_write_f32_round_trip() {
|
||||
let mut buf = [0u8; 4];
|
||||
|
||||
@@ -236,10 +236,6 @@ impl TypedefEngine {
|
||||
let v = data_access::read_u32(buffer, range.start, field_path, endian)?;
|
||||
Ok(FieldValue::U32(v))
|
||||
}
|
||||
TypeDefKind::Uint64 => {
|
||||
let v = data_access::read_u64(buffer, range.start, field_path, endian)?;
|
||||
Ok(FieldValue::U64(v))
|
||||
}
|
||||
TypeDefKind::Float32 => {
|
||||
let v = data_access::read_f32(buffer, range.start, field_path, endian)?;
|
||||
Ok(FieldValue::F32(v))
|
||||
@@ -339,9 +335,6 @@ impl TypedefEngine {
|
||||
FieldValue::U32(v) => {
|
||||
data_access::write_u32(buffer, range.start, *v, field_path, endian)
|
||||
}
|
||||
FieldValue::U64(v) => {
|
||||
data_access::write_u64(buffer, range.start, *v, field_path, endian)
|
||||
}
|
||||
FieldValue::F32(v) => {
|
||||
data_access::write_f32(buffer, range.start, *v, field_path, endian)
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ pub enum TypeDefKind {
|
||||
Uint8,
|
||||
Uint16,
|
||||
Uint32,
|
||||
Uint64,
|
||||
Float32,
|
||||
Float64,
|
||||
Boolean,
|
||||
@@ -61,7 +60,6 @@ impl TypeDefKind {
|
||||
TypeDefKind::Uint8 => "TypeDef:Uint8",
|
||||
TypeDefKind::Uint16 => "TypeDef:Uint16",
|
||||
TypeDefKind::Uint32 => "TypeDef:Uint32",
|
||||
TypeDefKind::Uint64 => "TypeDef:Uint64",
|
||||
TypeDefKind::Float32 => "TypeDef:Float32",
|
||||
TypeDefKind::Float64 => "TypeDef:Float64",
|
||||
TypeDefKind::Boolean => "TypeDef:Boolean",
|
||||
@@ -91,8 +89,7 @@ impl TypeDefKind {
|
||||
| TypeDefKind::Union
|
||||
| TypeDefKind::Array
|
||||
| TypeDefKind::Record
|
||||
| TypeDefKind::Timestamp
|
||||
| TypeDefKind::Uint64 => None,
|
||||
| TypeDefKind::Timestamp => None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +109,6 @@ impl TypeDefKind {
|
||||
| TypeDefKind::Record
|
||||
| TypeDefKind::Timestamp => 4,
|
||||
TypeDefKind::Struct | TypeDefKind::Union | TypeDefKind::Array => 1,
|
||||
TypeDefKind::Uint64 => 8,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +137,6 @@ impl TypeDefKind {
|
||||
| TypeDefKind::Int32
|
||||
| TypeDefKind::Uint16
|
||||
| TypeDefKind::Uint32
|
||||
| TypeDefKind::Uint64
|
||||
| TypeDefKind::Float32
|
||||
| TypeDefKind::Float64
|
||||
| TypeDefKind::Enum
|
||||
@@ -188,7 +183,6 @@ impl FromStr for TypeDefKind {
|
||||
"TypeDef:Uint8" => Ok(TypeDefKind::Uint8),
|
||||
"TypeDef:Uint16" => Ok(TypeDefKind::Uint16),
|
||||
"TypeDef:Uint32" => Ok(TypeDefKind::Uint32),
|
||||
"TypeDef:Uint64" => Ok(TypeDefKind::Uint64),
|
||||
"TypeDef:Float32" => Ok(TypeDefKind::Float32),
|
||||
"TypeDef:Float64" => Ok(TypeDefKind::Float64),
|
||||
"TypeDef:Boolean" => Ok(TypeDefKind::Boolean),
|
||||
|
||||
@@ -35,10 +35,6 @@ pub enum FieldValue<'a> {
|
||||
U16(u16),
|
||||
/// `TypeDef:Uint32`.
|
||||
U32(u32),
|
||||
/// `TypeDef:Uint64` — included for completeness (the schema layer's
|
||||
/// `type_size` returns `None` for `TypeDef:Uint64`, but `data_access`
|
||||
/// provides `read_u64` and the reader exposes it when encountered).
|
||||
U64(u64),
|
||||
/// `TypeDef:Float32`.
|
||||
F32(f32),
|
||||
/// `TypeDef:Float64`.
|
||||
@@ -304,10 +300,6 @@ fn read_field_value<'a>(
|
||||
let v = data_access::read_u32(buffer, offset, field_path, endian)?;
|
||||
Ok((FieldValue::U32(v), offset + 4))
|
||||
}
|
||||
TypeDefKind::Uint64 => {
|
||||
let v = data_access::read_u64(buffer, offset, field_path, endian)?;
|
||||
Ok((FieldValue::U64(v), offset + 8))
|
||||
}
|
||||
TypeDefKind::Float32 => {
|
||||
let v = data_access::read_f32(buffer, offset, field_path, endian)?;
|
||||
Ok((FieldValue::F32(v), offset + 4))
|
||||
@@ -1065,7 +1057,6 @@ mod tests {
|
||||
"u8": { "TypeDef:Uint8": true },
|
||||
"u16": { "TypeDef:Uint16": true },
|
||||
"u32": { "TypeDef:Uint32": true },
|
||||
"u64": { "TypeDef:Uint64": true },
|
||||
"f32": { "TypeDef:Float32": true },
|
||||
"f64": { "TypeDef:Float64": true },
|
||||
"b": { "TypeDef:Boolean": true },
|
||||
@@ -1079,11 +1070,10 @@ mod tests {
|
||||
buf[7] = 200;
|
||||
buf[8..10].copy_from_slice(&0xBEEFu16.to_le_bytes());
|
||||
buf[10..14].copy_from_slice(&0xDEADBEEFu32.to_le_bytes());
|
||||
buf[14..22].copy_from_slice(&0x0102030405060708u64.to_le_bytes());
|
||||
buf[22..26].copy_from_slice(&std::f32::consts::PI.to_le_bytes());
|
||||
buf[26..34].copy_from_slice(&std::f64::consts::PI.to_le_bytes());
|
||||
buf[34] = 0x01;
|
||||
buf[35..39].copy_from_slice(&7u32.to_le_bytes());
|
||||
buf[14..18].copy_from_slice(&std::f32::consts::PI.to_le_bytes());
|
||||
buf[18..26].copy_from_slice(&std::f64::consts::PI.to_le_bytes());
|
||||
buf[26] = 0x01;
|
||||
buf[27..31].copy_from_slice(&7u32.to_le_bytes());
|
||||
|
||||
let mut reader = SequentialReader::new(&schema).unwrap();
|
||||
let (_, v) = reader.read_next(&buf).unwrap().unwrap();
|
||||
@@ -1099,8 +1089,6 @@ mod tests {
|
||||
let (_, v) = reader.read_next(&buf).unwrap().unwrap();
|
||||
assert_eq!(v, FieldValue::U32(0xDEADBEEF));
|
||||
let (_, v) = reader.read_next(&buf).unwrap().unwrap();
|
||||
assert_eq!(v, FieldValue::U64(0x0102030405060708));
|
||||
let (_, v) = reader.read_next(&buf).unwrap().unwrap();
|
||||
assert!(matches!(v, FieldValue::F32(x) if (x - std::f32::consts::PI).abs() < 1e-6));
|
||||
let (_, v) = reader.read_next(&buf).unwrap().unwrap();
|
||||
assert!(matches!(v, FieldValue::F64(x) if (x - std::f64::consts::PI).abs() < 1e-12));
|
||||
|
||||
@@ -32,13 +32,6 @@ fn read_u16_buffer_too_short_returns_access_error() {
|
||||
assert!(matches!(err, TypedefError::Access { .. }), "got {err:?}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_u64_buffer_too_short_returns_access_error() {
|
||||
let buffer = [0u8; 4];
|
||||
let err = data_access::read_u64(&buffer, 0, "offset", Endian::Big).unwrap_err();
|
||||
assert!(matches!(err, TypedefError::Access { .. }), "got {err:?}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_f32_buffer_too_short_returns_access_error() {
|
||||
let buffer = [0u8; 2];
|
||||
|
||||
Reference in new issue
Block a user