oai-statsig-python-core 0.26.0rc2__tar.gz → 0.27.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/Cargo.lock +50 -10
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/PKG-INFO +1 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/Cargo.toml +8 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +24 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +12 -9
- oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +126 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +6 -6
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +5 -4
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +26 -43
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +7 -7
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +6 -8
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +65 -13
- oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/evaluation_data.rs +420 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_types.rs +42 -11
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator.rs +154 -98
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator_context.rs +13 -2
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator_result.rs +8 -6
- oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/evaluator_value.rs +830 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/get_unit_id.rs +3 -3
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/mod.rs +1 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/rkyv_value.rs +132 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +4 -4
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/evaluation_plan.rs +93 -20
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/feature_gates_processor.rs +2 -2
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_formatter.rs +116 -12
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_process_iter.rs +19 -11
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/layer_configs_processor.rs +3 -3
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/param_stores_processor.rs +3 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +1 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/target_app_id_utils.rs +15 -6
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/ahash.rs +11 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/instance_registry.rs +48 -29
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_string.rs +1 -10
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +1316 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +713 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +11 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/mod.rs +1 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +312 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +273 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +351 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +826 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store.rs +1116 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +104 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +180 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +116 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2.rs +60 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_sync.rs +414 -0
- oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mod.rs +8 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +1 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/spec_store.rs +4 -8
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/explicit_params.rs +11 -7
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/proto_specs.rs +16 -7
- oai_statsig_python_core-0.27.0/statsig-rust/src/specs_response/specs_hash_map.rs +433 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig.rs +141 -47
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/fast_statsig_user.rs +8 -5
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user.rs +11 -3
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_internal.rs +14 -3
- oai_statsig_python_core-0.27.0/statsig-rust/tests/data/dcs_missing_gates.json +291 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/evaluator_value_tests.rs +28 -1
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +50 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/instance_registry_tests.rs +91 -0
- oai_statsig_python_core-0.27.0/statsig-rust/tests/interner_contention_bench.rs +71 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_internal_tests.rs +49 -1
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -54
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/evaluation/evaluator_value.rs +0 -412
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -337
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/interned_store.rs +0 -1238
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/mod.rs +0 -6
- oai_statsig_python_core-0.26.0rc2/statsig-rust/src/specs_response/specs_hash_map.rs +0 -116
- oai_statsig_python_core-0.26.0rc2/statsig-rust/tests/data/dcs_missing_gates.json +0 -142
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/README.md +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/README.md +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/fixtures/interned_store_v1.mmap +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -769,6 +769,16 @@ dependencies = [
|
|
|
769
769
|
"percent-encoding",
|
|
770
770
|
]
|
|
771
771
|
|
|
772
|
+
[[package]]
|
|
773
|
+
name = "fs4"
|
|
774
|
+
version = "1.1.0"
|
|
775
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
776
|
+
checksum = "7e72ed92b67c146290f88e9c89d60ca163ea417a446f61ffd7b72df3e7f1dfd5"
|
|
777
|
+
dependencies = [
|
|
778
|
+
"rustix 1.1.4",
|
|
779
|
+
"windows-sys 0.61.2",
|
|
780
|
+
]
|
|
781
|
+
|
|
772
782
|
[[package]]
|
|
773
783
|
name = "futures"
|
|
774
784
|
version = "0.3.31"
|
|
@@ -1403,9 +1413,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
|
|
1403
1413
|
|
|
1404
1414
|
[[package]]
|
|
1405
1415
|
name = "libc"
|
|
1406
|
-
version = "0.2.
|
|
1416
|
+
version = "0.2.186"
|
|
1407
1417
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1408
|
-
checksum = "
|
|
1418
|
+
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
|
|
1409
1419
|
|
|
1410
1420
|
[[package]]
|
|
1411
1421
|
name = "libloading"
|
|
@@ -1423,6 +1433,12 @@ version = "0.4.15"
|
|
|
1423
1433
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1424
1434
|
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
|
|
1425
1435
|
|
|
1436
|
+
[[package]]
|
|
1437
|
+
name = "linux-raw-sys"
|
|
1438
|
+
version = "0.12.1"
|
|
1439
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1440
|
+
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
|
|
1441
|
+
|
|
1426
1442
|
[[package]]
|
|
1427
1443
|
name = "litemap"
|
|
1428
1444
|
version = "0.7.4"
|
|
@@ -1722,7 +1738,7 @@ dependencies = [
|
|
|
1722
1738
|
|
|
1723
1739
|
[[package]]
|
|
1724
1740
|
name = "oai-statsig-grpc"
|
|
1725
|
-
version = "0.
|
|
1741
|
+
version = "0.27.0"
|
|
1726
1742
|
dependencies = [
|
|
1727
1743
|
"async-trait",
|
|
1728
1744
|
"chrono",
|
|
@@ -1737,7 +1753,7 @@ dependencies = [
|
|
|
1737
1753
|
|
|
1738
1754
|
[[package]]
|
|
1739
1755
|
name = "oai-statsig-rust"
|
|
1740
|
-
version = "0.
|
|
1756
|
+
version = "0.27.0"
|
|
1741
1757
|
dependencies = [
|
|
1742
1758
|
"ahash",
|
|
1743
1759
|
"arc-swap",
|
|
@@ -1751,6 +1767,7 @@ dependencies = [
|
|
|
1751
1767
|
"fancy-regex",
|
|
1752
1768
|
"file-guard",
|
|
1753
1769
|
"flate2",
|
|
1770
|
+
"fs4",
|
|
1754
1771
|
"futures",
|
|
1755
1772
|
"indexmap 2.13.0",
|
|
1756
1773
|
"lazy_static",
|
|
@@ -1782,6 +1799,7 @@ dependencies = [
|
|
|
1782
1799
|
"tonic-prost-build",
|
|
1783
1800
|
"uaparser",
|
|
1784
1801
|
"uuid",
|
|
1802
|
+
"windows-sys 0.61.2",
|
|
1785
1803
|
"wiremock",
|
|
1786
1804
|
"zstd",
|
|
1787
1805
|
]
|
|
@@ -2584,10 +2602,23 @@ dependencies = [
|
|
|
2584
2602
|
"bitflags 2.8.0",
|
|
2585
2603
|
"errno",
|
|
2586
2604
|
"libc",
|
|
2587
|
-
"linux-raw-sys",
|
|
2605
|
+
"linux-raw-sys 0.4.15",
|
|
2588
2606
|
"windows-sys 0.59.0",
|
|
2589
2607
|
]
|
|
2590
2608
|
|
|
2609
|
+
[[package]]
|
|
2610
|
+
name = "rustix"
|
|
2611
|
+
version = "1.1.4"
|
|
2612
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2613
|
+
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
|
|
2614
|
+
dependencies = [
|
|
2615
|
+
"bitflags 2.8.0",
|
|
2616
|
+
"errno",
|
|
2617
|
+
"libc",
|
|
2618
|
+
"linux-raw-sys 0.12.1",
|
|
2619
|
+
"windows-sys 0.60.2",
|
|
2620
|
+
]
|
|
2621
|
+
|
|
2591
2622
|
[[package]]
|
|
2592
2623
|
name = "rustler"
|
|
2593
2624
|
version = "0.36.1"
|
|
@@ -3012,7 +3043,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3012
3043
|
|
|
3013
3044
|
[[package]]
|
|
3014
3045
|
name = "statsig-node"
|
|
3015
|
-
version = "0.
|
|
3046
|
+
version = "0.27.0"
|
|
3016
3047
|
dependencies = [
|
|
3017
3048
|
"async-trait",
|
|
3018
3049
|
"napi",
|
|
@@ -3027,7 +3058,7 @@ dependencies = [
|
|
|
3027
3058
|
|
|
3028
3059
|
[[package]]
|
|
3029
3060
|
name = "statsig-pyo3"
|
|
3030
|
-
version = "0.
|
|
3061
|
+
version = "0.27.0"
|
|
3031
3062
|
dependencies = [
|
|
3032
3063
|
"async-trait",
|
|
3033
3064
|
"lazy_static",
|
|
@@ -3042,7 +3073,7 @@ dependencies = [
|
|
|
3042
3073
|
|
|
3043
3074
|
[[package]]
|
|
3044
3075
|
name = "statsig_elixir"
|
|
3045
|
-
version = "0.
|
|
3076
|
+
version = "0.27.0"
|
|
3046
3077
|
dependencies = [
|
|
3047
3078
|
"async-trait",
|
|
3048
3079
|
"oai-statsig-rust",
|
|
@@ -3055,7 +3086,7 @@ dependencies = [
|
|
|
3055
3086
|
|
|
3056
3087
|
[[package]]
|
|
3057
3088
|
name = "statsig_ffi"
|
|
3058
|
-
version = "0.
|
|
3089
|
+
version = "0.27.0"
|
|
3059
3090
|
dependencies = [
|
|
3060
3091
|
"async-trait",
|
|
3061
3092
|
"cbindgen",
|
|
@@ -3145,7 +3176,7 @@ dependencies = [
|
|
|
3145
3176
|
"fastrand",
|
|
3146
3177
|
"getrandom 0.3.1",
|
|
3147
3178
|
"once_cell",
|
|
3148
|
-
"rustix",
|
|
3179
|
+
"rustix 0.38.44",
|
|
3149
3180
|
"windows-sys 0.59.0",
|
|
3150
3181
|
]
|
|
3151
3182
|
|
|
@@ -4011,6 +4042,15 @@ dependencies = [
|
|
|
4011
4042
|
"windows-targets 0.53.5",
|
|
4012
4043
|
]
|
|
4013
4044
|
|
|
4045
|
+
[[package]]
|
|
4046
|
+
name = "windows-sys"
|
|
4047
|
+
version = "0.61.2"
|
|
4048
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4049
|
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
|
4050
|
+
dependencies = [
|
|
4051
|
+
"windows-link 0.2.1",
|
|
4052
|
+
]
|
|
4053
|
+
|
|
4014
4054
|
[[package]]
|
|
4015
4055
|
name = "windows-targets"
|
|
4016
4056
|
version = "0.42.2"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
{oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/Cargo.toml
RENAMED
|
@@ -18,6 +18,7 @@ base64 = "0.22.1"
|
|
|
18
18
|
chrono = "0.4.40"
|
|
19
19
|
dashmap = "6.1.0"
|
|
20
20
|
file-guard = "0.2.0"
|
|
21
|
+
fs4 = "1.1.0"
|
|
21
22
|
flate2 = "1.0.35"
|
|
22
23
|
futures = "0.3.30"
|
|
23
24
|
indexmap = { version = "2.13.0", features = ["serde"], optional = true }
|
|
@@ -44,7 +45,7 @@ serde_json = { version = "1.0.143", features = [
|
|
|
44
45
|
] }
|
|
45
46
|
serde_with = "3.4.0"
|
|
46
47
|
sha2 = "0.10.8"
|
|
47
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.
|
|
48
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.27.0", optional = true }
|
|
48
49
|
simple_logger = { version = "5.0.0" }
|
|
49
50
|
tempfile = "3.8.1"
|
|
50
51
|
tokio = { version = "1.39.1", features = ["full"] }
|
|
@@ -62,6 +63,12 @@ ouroboros = "0.18.0"
|
|
|
62
63
|
[target.'cfg(target_env = "gnu")'.dependencies]
|
|
63
64
|
libc = "0.2"
|
|
64
65
|
|
|
66
|
+
[target.'cfg(windows)'.dependencies]
|
|
67
|
+
windows-sys = { version = "0.61.2", features = [
|
|
68
|
+
"Win32_Foundation",
|
|
69
|
+
"Win32_Storage_FileSystem",
|
|
70
|
+
] }
|
|
71
|
+
|
|
65
72
|
[build-dependencies]
|
|
66
73
|
tonic-prost-build = "0.14"
|
|
67
74
|
|
|
@@ -50,6 +50,30 @@ fn test_memoization_from_json_bool() {
|
|
|
50
50
|
assert_eq!(get_memo_len(), 0, "Bools are not memoized");
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
#[test]
|
|
54
|
+
#[serial]
|
|
55
|
+
fn test_stable_hash_ignores_object_order() {
|
|
56
|
+
let first = serde_json::from_str::<DynamicReturnable>(
|
|
57
|
+
r#"{"first":1,"nested":{"alpha":true,"beta":false}}"#,
|
|
58
|
+
)
|
|
59
|
+
.unwrap();
|
|
60
|
+
let second = serde_json::from_str::<DynamicReturnable>(
|
|
61
|
+
r#"{"nested":{"beta":false,"alpha":true},"first":1}"#,
|
|
62
|
+
)
|
|
63
|
+
.unwrap();
|
|
64
|
+
|
|
65
|
+
assert_eq!(first.get_stable_hash(), second.get_stable_hash());
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#[test]
|
|
69
|
+
#[serial]
|
|
70
|
+
fn test_stable_hash_preserves_array_order() {
|
|
71
|
+
let first = serde_json::from_str::<DynamicReturnable>(r#"{"values":[1,2]}"#).unwrap();
|
|
72
|
+
let second = serde_json::from_str::<DynamicReturnable>(r#"{"values":[2,1]}"#).unwrap();
|
|
73
|
+
|
|
74
|
+
assert_ne!(first.get_stable_hash(), second.get_stable_hash());
|
|
75
|
+
}
|
|
76
|
+
|
|
53
77
|
fn get_memo_len() -> usize {
|
|
54
78
|
InternedStore::get_memoized_len().1
|
|
55
79
|
}
|
|
@@ -62,7 +62,7 @@ pub fn get_cmab_ranked_list(ctx: &mut EvaluatorContext, name: &str) -> Vec<CMABR
|
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
-
let unit_id = get_unit_id(ctx, &cmab.id_type);
|
|
65
|
+
let unit_id = get_unit_id(ctx, (&cmab.id_type).into());
|
|
66
66
|
let input = format!("{}.{}", cmab.salt, unit_id);
|
|
67
67
|
let user_hash = ctx.hashing.evaluation_hash(&input);
|
|
68
68
|
|
|
@@ -119,7 +119,7 @@ pub(crate) fn evaluate_cmab(
|
|
|
119
119
|
let cmab = unwrap_or_return!(cmabs.get(spec_name), false);
|
|
120
120
|
|
|
121
121
|
if !is_cmab_started(cmab) {
|
|
122
|
-
ctx.result.id_type = Some(
|
|
122
|
+
ctx.result.id_type = Some(cmab.id_type.value.clone());
|
|
123
123
|
ctx.result.version = Some(cmab.version);
|
|
124
124
|
ctx.result.is_experiment_active = cmab.enabled;
|
|
125
125
|
ctx.result.bool_value = false;
|
|
@@ -129,7 +129,7 @@ pub(crate) fn evaluate_cmab(
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
if !get_passes_targeting(ctx, cmab) {
|
|
132
|
-
ctx.result.id_type = Some(
|
|
132
|
+
ctx.result.id_type = Some(cmab.id_type.value.clone());
|
|
133
133
|
ctx.result.version = Some(cmab.version);
|
|
134
134
|
ctx.result.is_experiment_active = cmab.enabled;
|
|
135
135
|
ctx.result.bool_value = false;
|
|
@@ -138,11 +138,11 @@ pub(crate) fn evaluate_cmab(
|
|
|
138
138
|
return true;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
ctx.result.id_type = Some(
|
|
141
|
+
ctx.result.id_type = Some(cmab.id_type.value.clone());
|
|
142
142
|
ctx.result.version = Some(cmab.version);
|
|
143
143
|
ctx.result.is_experiment_active = cmab.enabled;
|
|
144
144
|
|
|
145
|
-
let unit_id = get_unit_id(ctx, &cmab.id_type);
|
|
145
|
+
let unit_id = get_unit_id(ctx, (&cmab.id_type).into());
|
|
146
146
|
let input = format!("{}.{}", cmab.salt, unit_id);
|
|
147
147
|
let user_hash = ctx.hashing.evaluation_hash(&input);
|
|
148
148
|
let config = match &cmab.config {
|
|
@@ -180,7 +180,7 @@ fn get_passes_targeting<'a>(ctx: &mut EvaluatorContext<'a>, cmab: &'a CMABConfig
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
let result = match Evaluator::
|
|
183
|
+
let result = match Evaluator::evaluate_with_name(ctx, targeting_gate_name, &SpecType::Gate) {
|
|
184
184
|
Ok(_) => ctx.result.bool_value,
|
|
185
185
|
Err(_) => false,
|
|
186
186
|
};
|
|
@@ -222,7 +222,7 @@ fn apply_random_group<'a>(
|
|
|
222
222
|
ctx.result.bool_value = true;
|
|
223
223
|
ctx.result.rule_id = Some(group.id.clone());
|
|
224
224
|
ctx.result.rule_id_suffix = Some(EXPLORE_RULE_ID_SUFFIX);
|
|
225
|
-
ctx.result.group_name = Some(InternedString::
|
|
225
|
+
ctx.result.group_name = Some(InternedString::from_string_uninterned(group.name.clone()));
|
|
226
226
|
ctx.result.json_value = Some(group.parameter_values.clone());
|
|
227
227
|
}
|
|
228
228
|
|
|
@@ -253,7 +253,8 @@ fn apply_sampling_group<'a>(
|
|
|
253
253
|
ctx.result.rule_id = Some(group.id.clone());
|
|
254
254
|
ctx.result.rule_id_suffix = Some(EXPLORE_RULE_ID_SUFFIX);
|
|
255
255
|
ctx.result.bool_value = true;
|
|
256
|
-
ctx.result.group_name =
|
|
256
|
+
ctx.result.group_name =
|
|
257
|
+
Some(InternedString::from_string_uninterned(group.name.clone()));
|
|
257
258
|
ctx.result.json_value = Some(group.parameter_values.clone());
|
|
258
259
|
return true;
|
|
259
260
|
}
|
|
@@ -294,7 +295,9 @@ fn apply_best_group<'a>(
|
|
|
294
295
|
}
|
|
295
296
|
ctx.result.bool_value = true;
|
|
296
297
|
ctx.result.rule_id = Some(best_group.id.clone());
|
|
297
|
-
ctx.result.group_name = Some(InternedString::
|
|
298
|
+
ctx.result.group_name = Some(InternedString::from_string_uninterned(
|
|
299
|
+
best_group.name.clone(),
|
|
300
|
+
));
|
|
298
301
|
ctx.result.json_value = Some(best_group.parameter_values.clone());
|
|
299
302
|
}
|
|
300
303
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
use crate::{
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, specs_response::spec_types::ConditionOperator,
|
|
3
|
+
unwrap_or_return, user::user_value::UserValueRef,
|
|
4
|
+
};
|
|
5
|
+
use ahash::AHashSet;
|
|
6
|
+
|
|
7
|
+
pub(crate) fn compare_arrays<'a>(
|
|
8
|
+
value: UserValueRef<'_>,
|
|
9
|
+
target_value: impl Into<EvaluatorValueRef<'a>>,
|
|
10
|
+
op: ConditionOperator,
|
|
11
|
+
) -> bool {
|
|
12
|
+
let target_value = target_value.into();
|
|
13
|
+
unwrap_or_return!(target_value.array_len(), false);
|
|
14
|
+
let value_len = unwrap_or_return!(value.array_len(), false);
|
|
15
|
+
let value_set: AHashSet<&str> = AHashSet::from_iter((0..value_len).map(|index| {
|
|
16
|
+
value
|
|
17
|
+
.array_item(index)
|
|
18
|
+
.and_then(UserValueRef::string_value)
|
|
19
|
+
.unwrap_or_default()
|
|
20
|
+
}));
|
|
21
|
+
|
|
22
|
+
let short_circuit = target_value.any_array_entry(|_, _, item| match op {
|
|
23
|
+
ConditionOperator::ArrayContainsAll => !value_set.contains(item),
|
|
24
|
+
ConditionOperator::ArrayContainsAny => value_set.contains(item),
|
|
25
|
+
ConditionOperator::ArrayContainsNone => value_set.contains(item),
|
|
26
|
+
ConditionOperator::NotArrayContainsAll => !value_set.contains(item),
|
|
27
|
+
_ => true,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
match op {
|
|
31
|
+
ConditionOperator::ArrayContainsAll => !short_circuit,
|
|
32
|
+
ConditionOperator::ArrayContainsAny => short_circuit,
|
|
33
|
+
ConditionOperator::ArrayContainsNone => !short_circuit,
|
|
34
|
+
ConditionOperator::NotArrayContainsAll => short_circuit,
|
|
35
|
+
_ => false,
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#[cfg(test)]
|
|
40
|
+
mod tests {
|
|
41
|
+
use super::compare_arrays;
|
|
42
|
+
use crate::{
|
|
43
|
+
dyn_value,
|
|
44
|
+
evaluation::evaluator_value::{EvaluatorValueType, MemoizedEvaluatorValue},
|
|
45
|
+
specs_response::spec_types::ConditionOperator,
|
|
46
|
+
test_only_make_eval_value,
|
|
47
|
+
};
|
|
48
|
+
use serde_json::json;
|
|
49
|
+
|
|
50
|
+
fn compare(
|
|
51
|
+
value: serde_json::Value,
|
|
52
|
+
target: &MemoizedEvaluatorValue,
|
|
53
|
+
op: ConditionOperator,
|
|
54
|
+
) -> bool {
|
|
55
|
+
let value = dyn_value!(value);
|
|
56
|
+
compare_arrays((&value).into(), target, op)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#[test]
|
|
60
|
+
fn array_operators_preserve_quantifier_semantics() {
|
|
61
|
+
let target = test_only_make_eval_value!(["a", "b"]);
|
|
62
|
+
|
|
63
|
+
let cases = [
|
|
64
|
+
(json!(["a", "b", "c"]), true, true, false, false),
|
|
65
|
+
(json!(["a"]), false, true, false, true),
|
|
66
|
+
(json!(["z"]), false, false, true, true),
|
|
67
|
+
(json!([]), false, false, true, true),
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
for (value, all, any, none, not_all) in cases {
|
|
71
|
+
assert_eq!(
|
|
72
|
+
compare(value.clone(), &target, ConditionOperator::ArrayContainsAll),
|
|
73
|
+
all
|
|
74
|
+
);
|
|
75
|
+
assert_eq!(
|
|
76
|
+
compare(value.clone(), &target, ConditionOperator::ArrayContainsAny),
|
|
77
|
+
any
|
|
78
|
+
);
|
|
79
|
+
assert_eq!(
|
|
80
|
+
compare(value.clone(), &target, ConditionOperator::ArrayContainsNone),
|
|
81
|
+
none
|
|
82
|
+
);
|
|
83
|
+
assert_eq!(
|
|
84
|
+
compare(value, &target, ConditionOperator::NotArrayContainsAll),
|
|
85
|
+
not_all
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#[test]
|
|
91
|
+
fn empty_and_missing_targets_keep_existing_behavior() {
|
|
92
|
+
let empty = MemoizedEvaluatorValue::from(json!([]));
|
|
93
|
+
let value = json!(["a"]);
|
|
94
|
+
|
|
95
|
+
assert!(compare(
|
|
96
|
+
value.clone(),
|
|
97
|
+
&empty,
|
|
98
|
+
ConditionOperator::ArrayContainsAll
|
|
99
|
+
));
|
|
100
|
+
assert!(!compare(
|
|
101
|
+
value.clone(),
|
|
102
|
+
&empty,
|
|
103
|
+
ConditionOperator::ArrayContainsAny
|
|
104
|
+
));
|
|
105
|
+
assert!(compare(
|
|
106
|
+
value.clone(),
|
|
107
|
+
&empty,
|
|
108
|
+
ConditionOperator::ArrayContainsNone
|
|
109
|
+
));
|
|
110
|
+
assert!(!compare(
|
|
111
|
+
value.clone(),
|
|
112
|
+
&empty,
|
|
113
|
+
ConditionOperator::NotArrayContainsAll
|
|
114
|
+
));
|
|
115
|
+
|
|
116
|
+
let missing = MemoizedEvaluatorValue::new(EvaluatorValueType::Array);
|
|
117
|
+
for op in [
|
|
118
|
+
ConditionOperator::ArrayContainsAll,
|
|
119
|
+
ConditionOperator::ArrayContainsAny,
|
|
120
|
+
ConditionOperator::ArrayContainsNone,
|
|
121
|
+
ConditionOperator::NotArrayContainsAll,
|
|
122
|
+
] {
|
|
123
|
+
assert!(!compare(value.clone(), &missing, op));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
evaluation::evaluator_value::
|
|
3
|
-
|
|
4
|
-
user::user_value::UserValueRef,
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, specs_response::spec_types::ConditionOperator,
|
|
3
|
+
unwrap_or_return, user::user_value::UserValueRef,
|
|
5
4
|
};
|
|
6
5
|
|
|
7
|
-
pub(crate) fn compare_numbers(
|
|
6
|
+
pub(crate) fn compare_numbers<'a>(
|
|
8
7
|
left: UserValueRef<'_>,
|
|
9
|
-
right:
|
|
8
|
+
right: impl Into<EvaluatorValueRef<'a>>,
|
|
10
9
|
op: ConditionOperator,
|
|
11
10
|
) -> bool {
|
|
11
|
+
let right = right.into();
|
|
12
12
|
let left_num = unwrap_or_return!(left.float_value(), false);
|
|
13
|
-
let right_num = unwrap_or_return!(right.float_value, false);
|
|
13
|
+
let right_num = unwrap_or_return!(right.float_value(), false);
|
|
14
14
|
|
|
15
15
|
match op {
|
|
16
16
|
ConditionOperator::Gt => left_num > right_num,
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
evaluation::evaluator_value::
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, log_w, unwrap_or_return,
|
|
3
3
|
user::user_value::UserValueRef,
|
|
4
4
|
};
|
|
5
5
|
|
|
6
6
|
const TAG: &str = "CompareStrWithRegex";
|
|
7
7
|
|
|
8
|
-
pub(crate) fn compare_str_with_regex(
|
|
8
|
+
pub(crate) fn compare_str_with_regex<'a>(
|
|
9
9
|
value: UserValueRef<'_>,
|
|
10
|
-
regex_value:
|
|
10
|
+
regex_value: impl Into<EvaluatorValueRef<'a>>,
|
|
11
11
|
) -> bool {
|
|
12
|
+
let regex_value = regex_value.into();
|
|
12
13
|
let value_str = unwrap_or_return!(value.string_value(), false);
|
|
13
|
-
let regex = match
|
|
14
|
+
let regex = match regex_value.regex_value() {
|
|
14
15
|
Some(regex) => regex,
|
|
15
16
|
None => {
|
|
16
17
|
log_w!(
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
evaluation::evaluator_value::
|
|
3
|
-
|
|
4
|
-
user::user_value::UserValueRef,
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, specs_response::spec_types::ConditionOperator,
|
|
3
|
+
unwrap_or_return, user::user_value::UserValueRef,
|
|
5
4
|
};
|
|
6
5
|
|
|
7
|
-
pub(crate) fn compare_strings_in_array(
|
|
6
|
+
pub(crate) fn compare_strings_in_array<'a>(
|
|
8
7
|
value: UserValueRef<'_>,
|
|
9
|
-
target_value:
|
|
8
|
+
target_value: impl Into<EvaluatorValueRef<'a>>,
|
|
10
9
|
op: ConditionOperator,
|
|
11
10
|
) -> bool {
|
|
11
|
+
let target_value = target_value.into();
|
|
12
12
|
let ignore_case = !matches!(
|
|
13
13
|
op,
|
|
14
14
|
ConditionOperator::AnyCaseSensitive | ConditionOperator::NoneCaseSensitive
|
|
@@ -28,46 +28,35 @@ pub(crate) fn compare_strings_in_array(
|
|
|
28
28
|
|
|
29
29
|
fn compare_strings_in_array_impl(
|
|
30
30
|
value: UserValueRef<'_>,
|
|
31
|
-
target_value:
|
|
31
|
+
target_value: EvaluatorValueRef<'_>,
|
|
32
32
|
op: ConditionOperator,
|
|
33
33
|
ignore_case: bool,
|
|
34
34
|
) -> bool {
|
|
35
|
-
if
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.any(|value| value.as_str() == lowercased_value.as_ref())
|
|
45
|
-
}),
|
|
46
|
-
};
|
|
47
|
-
return contains;
|
|
48
|
-
}
|
|
35
|
+
if target_value.object_len().is_some()
|
|
36
|
+
&& matches!(op, ConditionOperator::Any | ConditionOperator::NoneOf)
|
|
37
|
+
{
|
|
38
|
+
return match value.lowercased_lookup_key() {
|
|
39
|
+
Some(key) => target_value.object_contains_key(key),
|
|
40
|
+
None => value
|
|
41
|
+
.lowercased_string_value()
|
|
42
|
+
.is_some_and(|value| target_value.object_contains_key_str(value.as_ref())),
|
|
43
|
+
};
|
|
49
44
|
}
|
|
50
45
|
|
|
51
|
-
|
|
46
|
+
unwrap_or_return!(target_value.array_len(), false);
|
|
52
47
|
if matches!(op, ConditionOperator::Any | ConditionOperator::NoneOf) {
|
|
53
|
-
|
|
54
|
-
Some(key) =>
|
|
48
|
+
return match value.lowercased_lookup_key() {
|
|
49
|
+
Some(key) => target_value.array_contains_key(key),
|
|
55
50
|
None => value
|
|
56
51
|
.lowercased_string_value()
|
|
57
|
-
.is_some_and(|
|
|
58
|
-
array_value
|
|
59
|
-
.keys()
|
|
60
|
-
.any(|value| value.as_str() == lowercased_value.as_ref())
|
|
61
|
-
}),
|
|
52
|
+
.is_some_and(|value| target_value.array_contains_lowercase(value.as_ref())),
|
|
62
53
|
};
|
|
63
|
-
return contains;
|
|
64
54
|
}
|
|
65
55
|
|
|
66
56
|
let value_str = value.string_value().unwrap_or_default();
|
|
67
57
|
let lowercased_value = value.lowercased_string_value().unwrap_or_default();
|
|
68
58
|
|
|
69
|
-
|
|
70
|
-
for (lowercase_str, (_, current_str)) in array_value {
|
|
59
|
+
target_value.any_array_entry(|lowercase_str, _, current_str| {
|
|
71
60
|
let left = if ignore_case {
|
|
72
61
|
lowercased_value.as_ref()
|
|
73
62
|
} else {
|
|
@@ -80,25 +69,19 @@ fn compare_strings_in_array_impl(
|
|
|
80
69
|
current_str
|
|
81
70
|
};
|
|
82
71
|
|
|
83
|
-
|
|
72
|
+
match op {
|
|
84
73
|
ConditionOperator::Any
|
|
85
74
|
| ConditionOperator::NoneOf
|
|
86
75
|
| ConditionOperator::AnyCaseSensitive
|
|
87
|
-
| ConditionOperator::NoneCaseSensitive => left == right
|
|
88
|
-
ConditionOperator::StrStartsWithAny => left.starts_with(right
|
|
89
|
-
ConditionOperator::StrEndsWithAny => left.ends_with(right
|
|
76
|
+
| ConditionOperator::NoneCaseSensitive => left == right,
|
|
77
|
+
ConditionOperator::StrStartsWithAny => left.starts_with(right),
|
|
78
|
+
ConditionOperator::StrEndsWithAny => left.ends_with(right),
|
|
90
79
|
ConditionOperator::StrContainsAny | ConditionOperator::StrContainsNone => {
|
|
91
|
-
contains_substring(left, right
|
|
80
|
+
contains_substring(left, right)
|
|
92
81
|
}
|
|
93
82
|
_ => false, // todo: unsupported?
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
if comparison_result {
|
|
97
|
-
break;
|
|
98
83
|
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
comparison_result
|
|
84
|
+
})
|
|
102
85
|
}
|
|
103
86
|
|
|
104
87
|
#[inline]
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
evaluation::evaluator_value::
|
|
3
|
-
|
|
4
|
-
user::user_value::UserValueRef,
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, specs_response::spec_types::ConditionOperator,
|
|
3
|
+
unwrap_or_return, user::user_value::UserValueRef,
|
|
5
4
|
};
|
|
6
5
|
use chrono::Duration;
|
|
7
6
|
|
|
8
|
-
pub(crate) fn compare_time(
|
|
7
|
+
pub(crate) fn compare_time<'a>(
|
|
9
8
|
left: UserValueRef<'_>,
|
|
10
|
-
right:
|
|
9
|
+
right: impl Into<EvaluatorValueRef<'a>>,
|
|
11
10
|
op: ConditionOperator,
|
|
12
11
|
) -> bool {
|
|
12
|
+
let right = right.into();
|
|
13
13
|
let raw_left_ts = unwrap_or_return!(left.timestamp_value().or(left.int_value()), false);
|
|
14
14
|
let left_ts = to_millis(raw_left_ts);
|
|
15
15
|
|
|
16
16
|
// dcs will always be in milliseconds
|
|
17
17
|
let right_ts = unwrap_or_return!(
|
|
18
18
|
right
|
|
19
|
-
.timestamp_value
|
|
20
|
-
.
|
|
19
|
+
.timestamp_value()
|
|
20
|
+
.or_else(|| right.float_value().map(|x| x as i64)),
|
|
21
21
|
false
|
|
22
22
|
);
|
|
23
23
|
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
evaluation::evaluator_value::
|
|
3
|
-
|
|
4
|
-
user::user_value::UserValueRef,
|
|
2
|
+
evaluation::evaluator_value::EvaluatorValueRef, specs_response::spec_types::ConditionOperator,
|
|
3
|
+
unwrap_or_return, user::user_value::UserValueRef,
|
|
5
4
|
};
|
|
6
5
|
|
|
7
|
-
pub(crate) fn compare_versions(
|
|
6
|
+
pub(crate) fn compare_versions<'a>(
|
|
8
7
|
left: UserValueRef<'_>,
|
|
9
|
-
right:
|
|
8
|
+
right: impl Into<EvaluatorValueRef<'a>>,
|
|
10
9
|
op: ConditionOperator,
|
|
11
10
|
) -> bool {
|
|
11
|
+
let right = right.into();
|
|
12
12
|
let left_str = unwrap_or_return!(left.string_value(), false);
|
|
13
|
-
let
|
|
14
|
-
|
|
15
|
-
let right_str = &right_dyn_str.value;
|
|
13
|
+
let right_str = unwrap_or_return!(right.string_value(), false);
|
|
16
14
|
|
|
17
15
|
let result = match compare_versions_impl(left_str, right_str) {
|
|
18
16
|
ComparisonResult::Ok(result) => result,
|