oai-statsig-python-core 0.25.0rc8__tar.gz → 0.26.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.25.0rc8 → oai_statsig_python_core-0.26.0}/Cargo.lock +7 -6
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/PKG-INFO +1 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_data_store.py +6 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/Cargo.toml +2 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +65 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluation_types.rs +4 -18
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +17 -23
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +59 -39
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluator.rs +16 -9
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluator_context.rs +1 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluator_result.rs +103 -0
- oai_statsig_python_core-0.26.0/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +399 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +46 -2
- oai_statsig_python_core-0.26.0/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +65 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +1 -2
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/evaluation_plan.rs +12 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/gcir_formatter.rs +91 -23
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/gcir_process_iter.rs +173 -85
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -1
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/mod.rs +1 -0
- oai_statsig_python_core-0.26.0/statsig-rust/src/gcir/secondary_exposure_hashing.rs +280 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_string.rs +2 -2
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/interned_store.rs +295 -7
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +13 -2
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/gcir_tests.rs +66 -1
- oai_statsig_python_core-0.26.0/statsig-rust/tests/substring_search_bench.rs +268 -0
- oai_statsig_python_core-0.25.0rc8/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -51
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/README.md +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/README.md +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/fixtures/interned_store_v1.mmap +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -1722,7 +1722,7 @@ dependencies = [
|
|
|
1722
1722
|
|
|
1723
1723
|
[[package]]
|
|
1724
1724
|
name = "oai-statsig-grpc"
|
|
1725
|
-
version = "0.
|
|
1725
|
+
version = "0.26.0"
|
|
1726
1726
|
dependencies = [
|
|
1727
1727
|
"async-trait",
|
|
1728
1728
|
"chrono",
|
|
@@ -1737,7 +1737,7 @@ dependencies = [
|
|
|
1737
1737
|
|
|
1738
1738
|
[[package]]
|
|
1739
1739
|
name = "oai-statsig-rust"
|
|
1740
|
-
version = "0.
|
|
1740
|
+
version = "0.26.0"
|
|
1741
1741
|
dependencies = [
|
|
1742
1742
|
"ahash",
|
|
1743
1743
|
"arc-swap",
|
|
@@ -1756,6 +1756,7 @@ dependencies = [
|
|
|
1756
1756
|
"lazy_static",
|
|
1757
1757
|
"libc",
|
|
1758
1758
|
"log",
|
|
1759
|
+
"memchr",
|
|
1759
1760
|
"memmap2",
|
|
1760
1761
|
"mockito",
|
|
1761
1762
|
"more-asserts",
|
|
@@ -3011,7 +3012,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3011
3012
|
|
|
3012
3013
|
[[package]]
|
|
3013
3014
|
name = "statsig-node"
|
|
3014
|
-
version = "0.
|
|
3015
|
+
version = "0.26.0"
|
|
3015
3016
|
dependencies = [
|
|
3016
3017
|
"async-trait",
|
|
3017
3018
|
"napi",
|
|
@@ -3026,7 +3027,7 @@ dependencies = [
|
|
|
3026
3027
|
|
|
3027
3028
|
[[package]]
|
|
3028
3029
|
name = "statsig-pyo3"
|
|
3029
|
-
version = "0.
|
|
3030
|
+
version = "0.26.0"
|
|
3030
3031
|
dependencies = [
|
|
3031
3032
|
"async-trait",
|
|
3032
3033
|
"lazy_static",
|
|
@@ -3041,7 +3042,7 @@ dependencies = [
|
|
|
3041
3042
|
|
|
3042
3043
|
[[package]]
|
|
3043
3044
|
name = "statsig_elixir"
|
|
3044
|
-
version = "0.
|
|
3045
|
+
version = "0.26.0"
|
|
3045
3046
|
dependencies = [
|
|
3046
3047
|
"async-trait",
|
|
3047
3048
|
"oai-statsig-rust",
|
|
@@ -3054,7 +3055,7 @@ dependencies = [
|
|
|
3054
3055
|
|
|
3055
3056
|
[[package]]
|
|
3056
3057
|
name = "statsig_ffi"
|
|
3057
|
-
version = "0.
|
|
3058
|
+
version = "0.26.0"
|
|
3058
3059
|
dependencies = [
|
|
3059
3060
|
"async-trait",
|
|
3060
3061
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -222,6 +222,12 @@ def test_data_store_usage_get(statsig_setup):
|
|
|
222
222
|
assert gate.details.reason == "Adapter(DataStore):Recognized"
|
|
223
223
|
assert gate.value == True
|
|
224
224
|
assert gate.details.lcut == known_lcut
|
|
225
|
+
|
|
226
|
+
for _ in range(100):
|
|
227
|
+
if data_store.get_called_count >= 2:
|
|
228
|
+
break
|
|
229
|
+
sleep(0.05)
|
|
230
|
+
|
|
225
231
|
assert data_store.get_called_count > 1
|
|
226
232
|
|
|
227
233
|
|
{oai_statsig_python_core-0.25.0rc8 → oai_statsig_python_core-0.26.0}/statsig-rust/Cargo.toml
RENAMED
|
@@ -23,6 +23,7 @@ futures = "0.3.30"
|
|
|
23
23
|
indexmap = { version = "2.13.0", features = ["serde"], optional = true }
|
|
24
24
|
lazy_static = "1.5.0"
|
|
25
25
|
log = "0.4.22"
|
|
26
|
+
memchr = "2.7.4"
|
|
26
27
|
parking_lot = "0.12.1"
|
|
27
28
|
percent-encoding = "2.3.1"
|
|
28
29
|
rand = "0.8.4"
|
|
@@ -43,7 +44,7 @@ serde_json = { version = "1.0.143", features = [
|
|
|
43
44
|
] }
|
|
44
45
|
serde_with = "3.4.0"
|
|
45
46
|
sha2 = "0.10.8"
|
|
46
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.
|
|
47
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.26.0", optional = true }
|
|
47
48
|
simple_logger = { version = "5.0.0" }
|
|
48
49
|
tempfile = "3.8.1"
|
|
49
50
|
tokio = { version = "1.39.1", features = ["full"] }
|
|
@@ -88,7 +88,7 @@ fn compare_strings_in_array_impl(
|
|
|
88
88
|
ConditionOperator::StrStartsWithAny => left.starts_with(right.as_str()),
|
|
89
89
|
ConditionOperator::StrEndsWithAny => left.ends_with(right.as_str()),
|
|
90
90
|
ConditionOperator::StrContainsAny | ConditionOperator::StrContainsNone => {
|
|
91
|
-
left
|
|
91
|
+
contains_substring(left, right.as_str())
|
|
92
92
|
}
|
|
93
93
|
_ => false, // todo: unsupported?
|
|
94
94
|
};
|
|
@@ -101,6 +101,15 @@ fn compare_strings_in_array_impl(
|
|
|
101
101
|
comparison_result
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
#[inline]
|
|
105
|
+
fn contains_substring(haystack: &str, needle: &str) -> bool {
|
|
106
|
+
if needle.len() <= 1 {
|
|
107
|
+
return haystack.contains(needle);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
memchr::memmem::find(haystack.as_bytes(), needle.as_bytes()).is_some()
|
|
111
|
+
}
|
|
112
|
+
|
|
104
113
|
#[cfg(test)]
|
|
105
114
|
mod tests {
|
|
106
115
|
use serde_json::json;
|
|
@@ -180,6 +189,61 @@ mod tests {
|
|
|
180
189
|
));
|
|
181
190
|
}
|
|
182
191
|
|
|
192
|
+
#[test]
|
|
193
|
+
fn test_str_contains_none() {
|
|
194
|
+
let value = dyn_value!("daniel@statsig.io");
|
|
195
|
+
let matching_targets = test_only_make_eval_value!(vec!["@example.com", "@statsig.io"]);
|
|
196
|
+
let missing_targets = test_only_make_eval_value!(vec!["@example.com", "@statsig.com"]);
|
|
197
|
+
|
|
198
|
+
assert!(!compare_strings_in_array(
|
|
199
|
+
(&value).into(),
|
|
200
|
+
&matching_targets,
|
|
201
|
+
ConditionOperator::StrContainsNone
|
|
202
|
+
));
|
|
203
|
+
assert!(compare_strings_in_array(
|
|
204
|
+
(&value).into(),
|
|
205
|
+
&missing_targets,
|
|
206
|
+
ConditionOperator::StrContainsNone
|
|
207
|
+
));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
#[test]
|
|
211
|
+
fn test_substring_search_matches_std_for_utf8_and_edge_cases() {
|
|
212
|
+
let haystacks = [
|
|
213
|
+
"",
|
|
214
|
+
"a",
|
|
215
|
+
"daniel@statsig.io",
|
|
216
|
+
"café au lait",
|
|
217
|
+
"東京都",
|
|
218
|
+
"a💖b",
|
|
219
|
+
"Straße",
|
|
220
|
+
"embedded\0null",
|
|
221
|
+
];
|
|
222
|
+
let needles = [
|
|
223
|
+
"",
|
|
224
|
+
"a",
|
|
225
|
+
"@statsig.io",
|
|
226
|
+
"@example.com",
|
|
227
|
+
"é",
|
|
228
|
+
"京",
|
|
229
|
+
"💖",
|
|
230
|
+
"ss",
|
|
231
|
+
"ß",
|
|
232
|
+
"\0",
|
|
233
|
+
"null",
|
|
234
|
+
];
|
|
235
|
+
|
|
236
|
+
for haystack in haystacks {
|
|
237
|
+
for needle in needles {
|
|
238
|
+
assert_eq!(
|
|
239
|
+
super::contains_substring(haystack, needle),
|
|
240
|
+
haystack.contains(needle),
|
|
241
|
+
"haystack={haystack:?}, needle={needle:?}"
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
183
247
|
#[test]
|
|
184
248
|
fn test_str_none_case_sensitive() {
|
|
185
249
|
let haystack = test_only_make_eval_value!(vec!["HELLO", "WORLD"]);
|
|
@@ -342,32 +342,18 @@ fn hash_parameter_rule_ids(parameter_rule_ids: &HashMap<InternedString, Interned
|
|
|
342
342
|
param_rule_ids_hash.finish()
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
pub(crate) fn push_optional_version_hash_values(hash_array: &mut Vec<u64>, version: &Option<u32>) {
|
|
346
|
-
hash_array.push(version.is_some() as u64);
|
|
347
|
-
hash_array.push(version.map_or(0, u64::from));
|
|
348
|
-
}
|
|
349
|
-
|
|
350
345
|
fn optional_version_hash_values(version: &Option<u32>) -> [u64; 2] {
|
|
351
346
|
[version.is_some() as u64, version.map_or(0, u64::from)]
|
|
352
347
|
}
|
|
353
348
|
|
|
354
349
|
#[cfg(test)]
|
|
355
350
|
mod tests {
|
|
356
|
-
use super::
|
|
351
|
+
use super::optional_version_hash_values;
|
|
357
352
|
|
|
358
353
|
#[test]
|
|
359
354
|
fn optional_version_hash_values_distinguish_missing_from_zero() {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
let mut zero = Vec::new();
|
|
364
|
-
push_optional_version_hash_values(&mut zero, &Some(0));
|
|
365
|
-
|
|
366
|
-
let mut one = Vec::new();
|
|
367
|
-
push_optional_version_hash_values(&mut one, &Some(1));
|
|
368
|
-
|
|
369
|
-
assert_eq!(missing, vec![0, 0]);
|
|
370
|
-
assert_eq!(zero, vec![1, 0]);
|
|
371
|
-
assert_eq!(one, vec![1, 1]);
|
|
355
|
+
assert_eq!(optional_version_hash_values(&None), [0, 0]);
|
|
356
|
+
assert_eq!(optional_version_hash_values(&Some(0)), [1, 0]);
|
|
357
|
+
assert_eq!(optional_version_hash_values(&Some(1)), [1, 1]);
|
|
372
358
|
}
|
|
373
359
|
}
|
|
@@ -30,7 +30,7 @@ pub struct GateEvaluationInitV2 {
|
|
|
30
30
|
|
|
31
31
|
impl GCIRHashable for GateEvaluationInitV2 {
|
|
32
32
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
33
|
-
let hash_array =
|
|
33
|
+
let hash_array = [
|
|
34
34
|
name.hash,
|
|
35
35
|
match self.value {
|
|
36
36
|
Some(true) => 1,
|
|
@@ -42,7 +42,7 @@ impl GCIRHashable for GateEvaluationInitV2 {
|
|
|
42
42
|
},
|
|
43
43
|
hash_secondary_exposures(&self.base.secondary_exposures),
|
|
44
44
|
];
|
|
45
|
-
hashing::
|
|
45
|
+
hashing::hash_u64_slice(&hash_array)
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -62,7 +62,7 @@ pub struct DynamicConfigEvaluationInitV2 {
|
|
|
62
62
|
|
|
63
63
|
impl GCIRHashable for DynamicConfigEvaluationInitV2 {
|
|
64
64
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
65
|
-
let hash_array =
|
|
65
|
+
let hash_array = [
|
|
66
66
|
name.hash,
|
|
67
67
|
self.value.hash,
|
|
68
68
|
match self.base.rule_id {
|
|
@@ -72,7 +72,7 @@ impl GCIRHashable for DynamicConfigEvaluationInitV2 {
|
|
|
72
72
|
hash_secondary_exposures(&self.base.secondary_exposures),
|
|
73
73
|
if self.passed { 1 } else { 0 },
|
|
74
74
|
];
|
|
75
|
-
hashing::
|
|
75
|
+
hashing::hash_u64_slice(&hash_array)
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -99,7 +99,7 @@ pub struct ExperimentEvaluationInitV2 {
|
|
|
99
99
|
|
|
100
100
|
impl GCIRHashable for ExperimentEvaluationInitV2 {
|
|
101
101
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
102
|
-
let hash_array =
|
|
102
|
+
let hash_array = [
|
|
103
103
|
name.hash,
|
|
104
104
|
self.value.hash,
|
|
105
105
|
match self.base.rule_id {
|
|
@@ -112,7 +112,7 @@ impl GCIRHashable for ExperimentEvaluationInitV2 {
|
|
|
112
112
|
opt_bool_to_hashable(&self.is_user_in_experiment),
|
|
113
113
|
];
|
|
114
114
|
|
|
115
|
-
hashing::
|
|
115
|
+
hashing::hash_u64_slice(&hash_array)
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -163,7 +163,7 @@ pub struct LayerEvaluationInitV2 {
|
|
|
163
163
|
|
|
164
164
|
impl GCIRHashable for LayerEvaluationInitV2 {
|
|
165
165
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
166
|
-
let
|
|
166
|
+
let hash_array = [
|
|
167
167
|
name.hash,
|
|
168
168
|
self.value.hash,
|
|
169
169
|
match self.base.rule_id {
|
|
@@ -177,27 +177,21 @@ impl GCIRHashable for LayerEvaluationInitV2 {
|
|
|
177
177
|
self.allocated_experiment_name
|
|
178
178
|
.as_ref()
|
|
179
179
|
.map_or(0, |n| n.hash),
|
|
180
|
+
hash_secondary_exposures(&self.undelegated_secondary_exposures),
|
|
180
181
|
];
|
|
181
|
-
let mut explicit_params_hashes = Vec::new();
|
|
182
|
-
if let Some(explicit_parameters) = &self.explicit_parameters {
|
|
183
|
-
for value in explicit_parameters.to_vec_interned() {
|
|
184
|
-
explicit_params_hashes.push(value.hash);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
hash_array.push(hash_secondary_exposures(
|
|
188
|
-
&self.undelegated_secondary_exposures,
|
|
189
|
-
));
|
|
190
182
|
|
|
191
|
-
hashing::
|
|
183
|
+
hashing::hash_u64_slice(&hash_array)
|
|
192
184
|
}
|
|
193
185
|
}
|
|
194
186
|
|
|
195
187
|
fn hash_secondary_exposures(exposures: &Option<Vec<InternedString>>) -> u64 {
|
|
196
|
-
let
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
188
|
+
let Some(exposures) = exposures else {
|
|
189
|
+
return hashing::hash_u64_slice(&[]);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
let mut secondary_exposure_hashes = hashing::U64HashBuilder::with_capacity(exposures.len());
|
|
193
|
+
for exposure in exposures {
|
|
194
|
+
secondary_exposure_hashes.push(exposure.hash);
|
|
201
195
|
}
|
|
202
|
-
|
|
196
|
+
secondary_exposure_hashes.finish()
|
|
203
197
|
}
|
|
@@ -3,8 +3,7 @@ use crate::gcir::gcir_formatter::GCIRHashable;
|
|
|
3
3
|
use crate::hashing::opt_bool_to_hashable;
|
|
4
4
|
use crate::interned_string::InternedString;
|
|
5
5
|
use crate::{
|
|
6
|
-
evaluation::evaluation_types::
|
|
7
|
-
specs_response::explicit_params::ExplicitParameters,
|
|
6
|
+
evaluation::evaluation_types::is_false, specs_response::explicit_params::ExplicitParameters,
|
|
8
7
|
};
|
|
9
8
|
use crate::{hashing, SecondaryExposure};
|
|
10
9
|
use serde::{Deserialize, Serialize};
|
|
@@ -29,14 +28,16 @@ pub struct GateEvaluationV2 {
|
|
|
29
28
|
|
|
30
29
|
impl GCIRHashable for GateEvaluationV2 {
|
|
31
30
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
32
|
-
let
|
|
31
|
+
let version_hashes = optional_version_hash_values(&self.base.version);
|
|
32
|
+
let hash_array = [
|
|
33
33
|
name.hash,
|
|
34
34
|
self.value as u64,
|
|
35
35
|
self.base.rule_id.hash,
|
|
36
36
|
hash_secondary_exposures(&self.base.secondary_exposures),
|
|
37
|
+
version_hashes[0],
|
|
38
|
+
version_hashes[1],
|
|
37
39
|
];
|
|
38
|
-
|
|
39
|
-
hashing::hash_one(hash_array)
|
|
40
|
+
hashing::hash_u64_slice(&hash_array)
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
|
|
@@ -56,15 +57,17 @@ pub struct DynamicConfigEvaluationV2 {
|
|
|
56
57
|
|
|
57
58
|
impl GCIRHashable for DynamicConfigEvaluationV2 {
|
|
58
59
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
59
|
-
let
|
|
60
|
+
let version_hashes = optional_version_hash_values(&self.base.version);
|
|
61
|
+
let hash_array = [
|
|
60
62
|
name.hash,
|
|
61
63
|
self.value.get_hash(),
|
|
62
64
|
self.base.rule_id.hash,
|
|
63
65
|
hash_secondary_exposures(&self.base.secondary_exposures),
|
|
64
66
|
self.passed as u64,
|
|
67
|
+
version_hashes[0],
|
|
68
|
+
version_hashes[1],
|
|
65
69
|
];
|
|
66
|
-
|
|
67
|
-
hashing::hash_one(hash_array)
|
|
70
|
+
hashing::hash_u64_slice(&hash_array)
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
|
|
@@ -99,26 +102,22 @@ pub struct ExperimentEvaluationV2 {
|
|
|
99
102
|
|
|
100
103
|
impl GCIRHashable for ExperimentEvaluationV2 {
|
|
101
104
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
102
|
-
let
|
|
105
|
+
let version_hashes = optional_version_hash_values(&self.base.version);
|
|
106
|
+
let hash_array = [
|
|
103
107
|
name.hash,
|
|
104
108
|
self.value.get_hash(),
|
|
105
109
|
self.base.rule_id.hash,
|
|
106
110
|
hash_secondary_exposures(&self.base.secondary_exposures),
|
|
107
111
|
self.is_in_layer as u64,
|
|
112
|
+
version_hashes[0],
|
|
113
|
+
version_hashes[1],
|
|
114
|
+
hash_explicit_parameters(self.explicit_parameters.as_ref()),
|
|
115
|
+
self.group_name.as_ref().map_or(0, |g| g.hash),
|
|
116
|
+
opt_bool_to_hashable(&self.is_experiment_active),
|
|
117
|
+
opt_bool_to_hashable(&self.is_user_in_experiment),
|
|
108
118
|
];
|
|
109
|
-
push_optional_version_hash_values(&mut hash_array, &self.base.version);
|
|
110
|
-
let mut explicit_params_hashes = Vec::new();
|
|
111
|
-
if let Some(explicit_parameters) = &self.explicit_parameters {
|
|
112
|
-
for value in explicit_parameters.to_vec_interned() {
|
|
113
|
-
explicit_params_hashes.push(value.hash);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
hash_array.push(hashing::hash_one(explicit_params_hashes));
|
|
117
|
-
hash_array.push(self.group_name.as_ref().map_or(0, |g| g.hash));
|
|
118
|
-
hash_array.push(opt_bool_to_hashable(&self.is_experiment_active));
|
|
119
|
-
hash_array.push(opt_bool_to_hashable(&self.is_user_in_experiment));
|
|
120
119
|
|
|
121
|
-
hashing::
|
|
120
|
+
hashing::hash_u64_slice(&hash_array)
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
123
|
|
|
@@ -168,7 +167,8 @@ pub struct LayerEvaluationV2 {
|
|
|
168
167
|
|
|
169
168
|
impl GCIRHashable for LayerEvaluationV2 {
|
|
170
169
|
fn create_hash(&self, name: &InternedString) -> u64 {
|
|
171
|
-
let
|
|
170
|
+
let version_hashes = optional_version_hash_values(&self.base.version);
|
|
171
|
+
let hash_array = [
|
|
172
172
|
name.hash,
|
|
173
173
|
self.value.get_hash(),
|
|
174
174
|
self.base.rule_id.hash,
|
|
@@ -179,29 +179,49 @@ impl GCIRHashable for LayerEvaluationV2 {
|
|
|
179
179
|
self.allocated_experiment_name
|
|
180
180
|
.as_ref()
|
|
181
181
|
.map_or(0, |n| n.hash),
|
|
182
|
+
version_hashes[0],
|
|
183
|
+
version_hashes[1],
|
|
184
|
+
hash_explicit_parameters(Some(&self.explicit_parameters)),
|
|
185
|
+
hash_optional_interned_string_exposures(self.undelegated_secondary_exposures.as_ref()),
|
|
182
186
|
];
|
|
183
|
-
push_optional_version_hash_values(&mut hash_array, &self.base.version);
|
|
184
|
-
let mut explicit_params_hashes = Vec::new();
|
|
185
|
-
for value in self.explicit_parameters.to_vec_interned() {
|
|
186
|
-
explicit_params_hashes.push(value.hash);
|
|
187
|
-
}
|
|
188
|
-
hash_array.push(hashing::hash_one(explicit_params_hashes));
|
|
189
|
-
let mut undelegated_secondary_exposure_hashes = Vec::new();
|
|
190
|
-
if let Some(undelegated_secondary_exposures) = &self.undelegated_secondary_exposures {
|
|
191
|
-
for exposure in undelegated_secondary_exposures {
|
|
192
|
-
undelegated_secondary_exposure_hashes.push(exposure.hash);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
hash_array.push(hashing::hash_one(undelegated_secondary_exposure_hashes));
|
|
196
187
|
|
|
197
|
-
hashing::
|
|
188
|
+
hashing::hash_u64_slice(&hash_array)
|
|
198
189
|
}
|
|
199
190
|
}
|
|
200
191
|
|
|
201
|
-
fn hash_secondary_exposures(exposures: &
|
|
202
|
-
let mut secondary_exposure_hashes =
|
|
192
|
+
fn hash_secondary_exposures(exposures: &[String]) -> u64 {
|
|
193
|
+
let mut secondary_exposure_hashes = hashing::U64HashBuilder::with_capacity(exposures.len());
|
|
203
194
|
for exposure in exposures {
|
|
204
195
|
secondary_exposure_hashes.push(hashing::ahash_str(exposure));
|
|
205
196
|
}
|
|
206
|
-
|
|
197
|
+
secondary_exposure_hashes.finish()
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
fn hash_optional_interned_string_exposures(exposures: Option<&Vec<InternedString>>) -> u64 {
|
|
201
|
+
let Some(exposures) = exposures else {
|
|
202
|
+
return hashing::hash_u64_slice(&[]);
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
let mut exposure_hashes = hashing::U64HashBuilder::with_capacity(exposures.len());
|
|
206
|
+
for exposure in exposures {
|
|
207
|
+
exposure_hashes.push(exposure.hash);
|
|
208
|
+
}
|
|
209
|
+
exposure_hashes.finish()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
fn hash_explicit_parameters(explicit_parameters: Option<&ExplicitParameters>) -> u64 {
|
|
213
|
+
let Some(explicit_parameters) = explicit_parameters else {
|
|
214
|
+
return hashing::hash_u64_slice(&[]);
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
let mut explicit_params_hashes =
|
|
218
|
+
hashing::U64HashBuilder::with_capacity(explicit_parameters.as_slice().len());
|
|
219
|
+
for value in explicit_parameters.as_slice() {
|
|
220
|
+
explicit_params_hashes.push(value.hash);
|
|
221
|
+
}
|
|
222
|
+
explicit_params_hashes.finish()
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
fn optional_version_hash_values(version: &Option<u32>) -> [u64; 2] {
|
|
226
|
+
[version.is_some() as u64, version.map_or(0, u64::from)]
|
|
207
227
|
}
|
|
@@ -166,21 +166,22 @@ fn new_layer_eval<'a>(
|
|
|
166
166
|
) -> Result<Recognition, StatsigErr> {
|
|
167
167
|
let mut has_passed_rule = false;
|
|
168
168
|
let mut passed = false;
|
|
169
|
-
let mut rule_id
|
|
169
|
+
let mut rule_id = Some(InternedString::default_rule_id());
|
|
170
170
|
let mut delegate_name: Option<InternedString> = None;
|
|
171
171
|
let mut rule_ids: HashMap<InternedString, InternedString> = HashMap::new();
|
|
172
172
|
let mut value: HashMap<String, Value> = HashMap::new();
|
|
173
173
|
let mut group_name: Option<InternedString> = None;
|
|
174
174
|
let mut is_experiment_group = false;
|
|
175
|
+
let mut is_experiment_active = false;
|
|
175
176
|
let mut explicit_parameters: Option<ExplicitParameters> = None;
|
|
176
177
|
let mut secondary_exposures: Vec<SecondaryExposure> = Vec::new();
|
|
177
178
|
let mut undelegated_secondary_exposures: Vec<SecondaryExposure> = Vec::new();
|
|
178
179
|
|
|
179
180
|
for rule in &spec.rules {
|
|
180
181
|
evaluate_rule(ctx, rule)?;
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
let rule_secondary_exposures = std::mem::take(&mut ctx.result.secondary_exposures);
|
|
183
|
+
secondary_exposures.extend(rule_secondary_exposures.iter().cloned());
|
|
184
|
+
undelegated_secondary_exposures.extend(rule_secondary_exposures);
|
|
184
185
|
|
|
185
186
|
if ctx.result.unsupported {
|
|
186
187
|
return Ok(Recognition::Recognized);
|
|
@@ -217,15 +218,21 @@ fn new_layer_eval<'a>(
|
|
|
217
218
|
continue;
|
|
218
219
|
}
|
|
219
220
|
|
|
220
|
-
|
|
221
|
+
let delegate_rule_id = ctx
|
|
222
|
+
.result
|
|
223
|
+
.rule_id
|
|
224
|
+
.clone()
|
|
225
|
+
.unwrap_or_else(InternedString::default_rule_id);
|
|
226
|
+
update_parameter_values(&mut value, &mut rule_ids, delegate_value, &delegate_rule_id);
|
|
221
227
|
|
|
222
228
|
secondary_exposures.append(&mut ctx.result.secondary_exposures);
|
|
223
229
|
ctx.result.secondary_exposures.clear();
|
|
224
230
|
passed = ctx.result.bool_value;
|
|
225
231
|
delegate_name = ctx.result.config_delegate.clone();
|
|
226
232
|
group_name = ctx.result.group_name.clone();
|
|
227
|
-
rule_id = Some(
|
|
228
|
-
is_experiment_group =
|
|
233
|
+
rule_id = Some(delegate_rule_id);
|
|
234
|
+
is_experiment_group = ctx.result.is_experiment_group;
|
|
235
|
+
is_experiment_active = ctx.result.is_experiment_active;
|
|
229
236
|
explicit_parameters = ctx.result.explicit_parameters.clone();
|
|
230
237
|
} else {
|
|
231
238
|
passed = ctx.result.bool_value;
|
|
@@ -247,10 +254,10 @@ fn new_layer_eval<'a>(
|
|
|
247
254
|
ctx.result.bool_value = passed;
|
|
248
255
|
ctx.result.config_delegate = delegate_name;
|
|
249
256
|
ctx.result.group_name = group_name;
|
|
250
|
-
ctx.result.rule_id = rule_id
|
|
257
|
+
ctx.result.rule_id = rule_id;
|
|
251
258
|
ctx.result.json_value = Some(DynamicReturnable::from_map(value));
|
|
252
259
|
ctx.result.is_experiment_group = is_experiment_group;
|
|
253
|
-
ctx.result.is_experiment_active =
|
|
260
|
+
ctx.result.is_experiment_active = is_experiment_active;
|
|
254
261
|
ctx.result.explicit_parameters = explicit_parameters;
|
|
255
262
|
ctx.result.secondary_exposures = secondary_exposures;
|
|
256
263
|
ctx.result.undelegated_secondary_exposures = Some(undelegated_secondary_exposures);
|
|
@@ -72,7 +72,7 @@ impl<'a> EvaluatorContext<'a> {
|
|
|
72
72
|
|
|
73
73
|
pub fn reset_result(&mut self) {
|
|
74
74
|
self.nested_count = 0;
|
|
75
|
-
self.result
|
|
75
|
+
self.result.clear_for_reuse();
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
pub fn finalize_evaluation(&mut self, spec: &Spec, rule: Option<&Rule>) {
|