oai-statsig-rust 0.27.0

Statsig Rust SDK for usage in multi-user server environments.
Documentation
use crate::{
    user::user_value::{UserValue, UserValueMap},
    DynamicValue,
};

#[test]
fn float_hash_matches_dynamic_value_json_representation() {
    assert_eq!(
        UserValue::from_f64(1.0).hash_value(),
        DynamicValue::from_f64(1.0).hash_value,
    );
    assert_eq!(
        UserValue::from_f64(1.25).hash_value(),
        DynamicValue::from_f64(1.25).hash_value,
    );
}

#[test]
fn object_user_value_serializes_from_cached_raw_json() {
    let mut values = UserValueMap::default();
    values.insert("enabled".to_string(), UserValue::from_bool(true));
    values.insert("count".to_string(), UserValue::from_i64(3));

    let serialized = serde_json::to_value(UserValue::from_object(values)).unwrap();
    assert_eq!(serialized["enabled"], serde_json::json!(true));
    assert_eq!(serialized["count"], serde_json::json!(3));
}

#[test]
fn unsigned_json_integer_user_value_stays_integer() {
    let value = UserValue::from_json_value(serde_json::json!(9_223_372_036_854_775_808u64));

    assert_eq!(
        serde_json::to_value(&value).unwrap(),
        serde_json::json!(9_223_372_036_854_775_808u64)
    );
    assert!(matches!(
        value,
        UserValue::Int { value, .. } if value == 9_223_372_036_854_775_808i128
    ));
}

#[test]
fn direct_unsigned_user_value_stays_integer() {
    let value = UserValue::from_u64(9_223_372_036_854_775_808u64);

    assert_eq!(
        serde_json::to_value(&value).unwrap(),
        serde_json::json!(9_223_372_036_854_775_808u64)
    );
    assert!(matches!(
        value,
        UserValue::Int { value, .. } if value == 9_223_372_036_854_775_808i128
    ));
}