You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: compare_values.rs
    path of file: ./repos/libsql/libsql-sqlite3/ext/crr/rs/core/src
    
    the code of the file until where you have to start completion: use alloc::format;
use alloc::string::String;
use core::ffi::c_int;
use sqlite::value;
use sqlite::Value;
use sqlite_nostd as sqlite;

// TODO: add an integration test that ensures NULL == NULL!
pub fn crsql_compare_sqlite_values(l: *mut sqlite::value, r: *mut sqlite::value) -> c_int {
    let l_type = l.value_type();
    let r_type = r.value_type();

    if l_type != r_type {
        // We swap the compare since we want null to be _les
    
pub fn any_value_changed(left: &[*mut value], right: &[*mut value]) -> Result<bool, String> {
    if left.len() != right.len() {
        return Err(format!(
            "left and right values must have the same length: {} != {}",
            left.len(),
            right.len()
        ));
    }

    for (l, r) in left.iter().zip(right.iter()) {
        if crsql_compare_sqlite_values(*l, *r) != 0 {
            return Ok(true);
        }
    }

    Ok(false)
}