in crates/iceberg/src/spec/datatypes.rs [993:1073]
fn test_deeply_nested_struct() {
let record = r#"
{
"type": "struct",
"fields": [
{
"id": 1,
"name": "id",
"required": true,
"type": "uuid",
"initial-default": "0db3e2a8-9d1d-42b9-aa7b-74ebe558dceb",
"write-default": "ec5911be-b0a7-458c-8438-c9a3e53cffae"
},
{
"id": 2,
"name": "data",
"required": false,
"type": "int"
},
{
"id": 3,
"name": "address",
"required": true,
"type": {
"type": "struct",
"fields": [
{
"id": 4,
"name": "street",
"required": true,
"type": "string"
},
{
"id": 5,
"name": "province",
"required": false,
"type": "string"
},
{
"id": 6,
"name": "zip",
"required": true,
"type": "int"
}
]
}
}
]
}
"#;
let struct_type = Type::Struct(StructType::new(vec![
NestedField::required(1, "id", Type::Primitive(PrimitiveType::Uuid))
.with_initial_default(Literal::Primitive(PrimitiveLiteral::UInt128(
Uuid::parse_str("0db3e2a8-9d1d-42b9-aa7b-74ebe558dceb")
.unwrap()
.as_u128(),
)))
.with_write_default(Literal::Primitive(PrimitiveLiteral::UInt128(
Uuid::parse_str("ec5911be-b0a7-458c-8438-c9a3e53cffae")
.unwrap()
.as_u128(),
)))
.into(),
NestedField::optional(2, "data", Type::Primitive(PrimitiveType::Int)).into(),
NestedField::required(
3,
"address",
Type::Struct(StructType::new(vec![
NestedField::required(4, "street", Type::Primitive(PrimitiveType::String))
.into(),
NestedField::optional(5, "province", Type::Primitive(PrimitiveType::String))
.into(),
NestedField::required(6, "zip", Type::Primitive(PrimitiveType::Int)).into(),
])),
)
.into(),
]));
check_type_serde(record, struct_type)
}