lix 0.18.0

Embeddable version control for apps and AI agents.
Documentation
use crate::LixError;

pub(crate) fn parse_row_metadata_value(
    value: &str,
    context: impl AsRef<str>,
) -> Result<serde_json::Value, LixError> {
    let metadata = serde_json::from_str::<serde_json::Value>(value).map_err(|error| {
        LixError::new(
            "LIX_ERROR_INVALID_JSON",
            format!("{} metadata is invalid JSON: {error}", context.as_ref()),
        )
    })?;
    validate_row_metadata(&metadata, context)?;
    Ok(metadata)
}

pub(crate) fn validate_row_metadata(
    metadata: &serde_json::Value,
    context: impl AsRef<str>,
) -> Result<(), LixError> {
    if metadata.is_object() {
        return Ok(());
    }
    Err(LixError::new(
        LixError::CODE_SCHEMA_VALIDATION,
        format!("{} metadata must be a JSON object", context.as_ref()),
    ))
}

pub(crate) fn serialize_row_metadata(metadata: &str) -> String {
    metadata.to_owned()
}