in crates/paimon/src/spec/types.rs [1480:1500]
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
let (name, nullable) = s.split_once(' ').unwrap_or((s.as_str(), ""));
if name == T::NAME && nullable.is_empty() {
Ok(NullableType::from(true))
} else if name == T::NAME && nullable.contains("NOT NULL") {
Ok(NullableType::from(false))
} else {
let expect = format!("{} or {} NOT NULL", T::NAME, T::NAME);
Err(serde::de::Error::invalid_value(
serde::de::Unexpected::Str(s.as_str()),
&expect.as_str(),
))
}
}