remem-ai 0.6.90

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use toml_edit::{value, Item};

pub(crate) fn cli_value(raw: &str) -> Item {
    let trimmed = raw.trim();
    match trimmed.to_ascii_lowercase().as_str() {
        "true" => value(true),
        "false" => value(false),
        _ => match trimmed.parse::<i64>() {
            Ok(number) => value(number),
            Err(_) => match trimmed.parse::<f64>() {
                Ok(number) if number.is_finite() => value(number),
                _ => value(trim_outer_quotes(trimmed)),
            },
        },
    }
}

fn trim_outer_quotes(value: &str) -> &str {
    value
        .strip_prefix('"')
        .and_then(|value| value.strip_suffix('"'))
        .or_else(|| {
            value
                .strip_prefix('\'')
                .and_then(|value| value.strip_suffix('\''))
        })
        .unwrap_or(value)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn cli_value_parses_float_scalars() {
        assert_eq!(cli_value("0.75").as_float(), Some(0.75));
    }

    #[test]
    fn cli_value_keeps_quoted_float_scalars_as_strings() {
        assert_eq!(cli_value("\"0.75\"").as_str(), Some("0.75"));
    }
}