in crates/iceberg/src/spec/datatypes.rs [146:161]
fn deserialize_decimal<'de, D>(deserializer: D) -> Result<PrimitiveType, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
let (precision, scale) = s
.trim_start_matches(r"decimal(")
.trim_end_matches(')')
.split_once(',')
.ok_or_else(|| D::Error::custom("Decimal requires precision and scale: {s}"))?;
Ok(PrimitiveType::Decimal {
precision: precision.trim().parse().map_err(D::Error::custom)?,
scale: scale.trim().parse().map_err(D::Error::custom)?,
})
}