in crates/iceberg/src/spec/datatypes.rs [838:943]
fn primitive_type_serde() {
let record = r#"
{
"type": "struct",
"fields": [
{"id": 1, "name": "bool_field", "required": true, "type": "boolean"},
{"id": 2, "name": "int_field", "required": true, "type": "int"},
{"id": 3, "name": "long_field", "required": true, "type": "long"},
{"id": 4, "name": "float_field", "required": true, "type": "float"},
{"id": 5, "name": "double_field", "required": true, "type": "double"},
{"id": 6, "name": "decimal_field", "required": true, "type": "decimal(9,2)"},
{"id": 7, "name": "date_field", "required": true, "type": "date"},
{"id": 8, "name": "time_field", "required": true, "type": "time"},
{"id": 9, "name": "timestamp_field", "required": true, "type": "timestamp"},
{"id": 10, "name": "timestamptz_field", "required": true, "type": "timestamptz"},
{"id": 11, "name": "timestamp_ns_field", "required": true, "type": "timestamp_ns"},
{"id": 12, "name": "timestamptz_ns_field", "required": true, "type": "timestamptz_ns"},
{"id": 13, "name": "uuid_field", "required": true, "type": "uuid"},
{"id": 14, "name": "fixed_field", "required": true, "type": "fixed[10]"},
{"id": 15, "name": "binary_field", "required": true, "type": "binary"},
{"id": 16, "name": "string_field", "required": true, "type": "string"}
]
}
"#;
check_type_serde(
record,
Type::Struct(StructType {
fields: vec![
NestedField::required(1, "bool_field", Type::Primitive(PrimitiveType::Boolean))
.into(),
NestedField::required(2, "int_field", Type::Primitive(PrimitiveType::Int))
.into(),
NestedField::required(3, "long_field", Type::Primitive(PrimitiveType::Long))
.into(),
NestedField::required(4, "float_field", Type::Primitive(PrimitiveType::Float))
.into(),
NestedField::required(
5,
"double_field",
Type::Primitive(PrimitiveType::Double),
)
.into(),
NestedField::required(
6,
"decimal_field",
Type::Primitive(PrimitiveType::Decimal {
precision: 9,
scale: 2,
}),
)
.into(),
NestedField::required(7, "date_field", Type::Primitive(PrimitiveType::Date))
.into(),
NestedField::required(8, "time_field", Type::Primitive(PrimitiveType::Time))
.into(),
NestedField::required(
9,
"timestamp_field",
Type::Primitive(PrimitiveType::Timestamp),
)
.into(),
NestedField::required(
10,
"timestamptz_field",
Type::Primitive(PrimitiveType::Timestamptz),
)
.into(),
NestedField::required(
11,
"timestamp_ns_field",
Type::Primitive(PrimitiveType::TimestampNs),
)
.into(),
NestedField::required(
12,
"timestamptz_ns_field",
Type::Primitive(PrimitiveType::TimestamptzNs),
)
.into(),
NestedField::required(13, "uuid_field", Type::Primitive(PrimitiveType::Uuid))
.into(),
NestedField::required(
14,
"fixed_field",
Type::Primitive(PrimitiveType::Fixed(10)),
)
.into(),
NestedField::required(
15,
"binary_field",
Type::Primitive(PrimitiveType::Binary),
)
.into(),
NestedField::required(
16,
"string_field",
Type::Primitive(PrimitiveType::String),
)
.into(),
],
id_lookup: OnceLock::default(),
name_lookup: OnceLock::default(),
}),
)
}