fn from_str()

in crates/paimon/src/spec/types.rs [1177:1197]


    fn from_str(s: &str) -> Result<Self, Self::Err> {
        if !s.starts_with(serde_utils::VARCHAR::NAME) {
            return DataTypeInvalidSnafu {
                message: "Invalid VARCHAR type. Expected string to start with 'VARCHAR'.",
            }
            .fail();
        }

        let (open_bracket, close_bracket) = serde_utils::extract_brackets_pos(s, "VarCharType")?;
        let length_str = &s[open_bracket + 1..close_bracket];
        let length = length_str
            .trim()
            .parse::<u32>()
            .map_err(|_| Error::DataTypeInvalid {
                message: "Invalid VARCHAR length. Unable to parse length as a u32.".to_string(),
            })?;

        let nullable = !s[close_bracket..].contains("NOT NULL");

        Ok(VarCharType { nullable, length })
    }