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.
Files changed (419) hide show
  1. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/Cargo.lock +50 -10
  2. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/Cargo.toml +1 -1
  3. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/PKG-INFO +1 -1
  4. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/Cargo.toml +8 -1
  5. {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
  6. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +12 -9
  7. oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +126 -0
  8. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +6 -6
  9. {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
  10. {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
  11. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +7 -7
  12. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +6 -8
  13. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +65 -13
  14. oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/evaluation_data.rs +420 -0
  15. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_types.rs +42 -11
  16. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator.rs +154 -98
  17. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator_context.rs +13 -2
  18. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluator_result.rs +8 -6
  19. oai_statsig_python_core-0.27.0/statsig-rust/src/evaluation/evaluator_value.rs +830 -0
  20. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/get_unit_id.rs +3 -3
  21. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/mod.rs +1 -0
  22. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/rkyv_value.rs +132 -0
  23. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +4 -4
  24. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/evaluation_plan.rs +93 -20
  25. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/feature_gates_processor.rs +2 -2
  26. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_formatter.rs +116 -12
  27. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_process_iter.rs +19 -11
  28. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/layer_configs_processor.rs +3 -3
  29. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/param_stores_processor.rs +3 -1
  30. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +1 -1
  31. {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
  32. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/ahash.rs +11 -0
  33. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/instance_registry.rs +48 -29
  34. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_string.rs +1 -10
  35. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +1316 -0
  36. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +713 -0
  37. {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
  38. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/interned_values/__tests__/mod.rs +1 -0
  39. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +312 -0
  40. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +273 -0
  41. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +351 -0
  42. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +826 -0
  43. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/interned_store.rs +1116 -0
  44. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +104 -0
  45. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +180 -0
  46. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +116 -0
  47. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_data_v2.rs +60 -0
  48. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mmap_sync.rs +414 -0
  49. oai_statsig_python_core-0.27.0/statsig-rust/src/interned_values/mod.rs +8 -0
  50. {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
  51. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/spec_store.rs +4 -8
  52. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/explicit_params.rs +11 -7
  53. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/proto_specs.rs +16 -7
  54. oai_statsig_python_core-0.27.0/statsig-rust/src/specs_response/specs_hash_map.rs +433 -0
  55. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig.rs +141 -47
  56. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/fast_statsig_user.rs +8 -5
  57. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user.rs +11 -3
  58. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_internal.rs +14 -3
  59. oai_statsig_python_core-0.27.0/statsig-rust/tests/data/dcs_missing_gates.json +291 -0
  60. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/evaluator_value_tests.rs +28 -1
  61. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +50 -0
  62. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/instance_registry_tests.rs +91 -0
  63. oai_statsig_python_core-0.27.0/statsig-rust/tests/interner_contention_bench.rs +71 -0
  64. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_internal_tests.rs +49 -1
  65. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -54
  66. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/evaluation/evaluator_value.rs +0 -412
  67. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -337
  68. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/interned_store.rs +0 -1238
  69. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/interned_values/mod.rs +0 -6
  70. oai_statsig_python_core-0.26.0rc2/statsig-rust/src/specs_response/specs_hash_map.rs +0 -116
  71. oai_statsig_python_core-0.26.0rc2/statsig-rust/tests/data/dcs_missing_gates.json +0 -142
  72. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/__init__.py +0 -0
  73. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
  74. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/data_store.py +0 -0
  75. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/error_boundary.py +0 -0
  76. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
  77. {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
  78. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/observability_client.py +0 -0
  79. {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
  80. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
  81. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/py.typed +0 -0
  82. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/requirements.txt +0 -0
  83. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/statsig.py +0 -0
  84. {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
  85. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/py_src/statsig_python_core/statsig_types.py +0 -0
  86. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/pyproject.toml +0 -0
  87. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/Cargo.toml +0 -0
  88. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/README.md +0 -0
  89. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/build.rs +0 -0
  90. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/lib.rs +0 -0
  91. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
  92. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
  93. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
  94. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
  95. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
  96. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
  97. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/.gitignore +0 -0
  98. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/Cargo.toml +0 -0
  99. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/README.md +0 -0
  100. {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
  101. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
  102. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
  103. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
  104. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
  105. {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
  106. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
  107. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/lib.rs +0 -0
  108. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
  109. {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
  110. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
  111. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
  112. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/safe_gil.rs +0 -0
  113. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
  114. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
  115. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_options_py.rs +0 -0
  116. {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
  117. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
  118. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
  119. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
  120. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
  121. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
  122. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/fork_runner.py +0 -0
  123. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
  124. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
  125. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/profile_util.py +0 -0
  126. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
  127. {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
  128. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_data_store.py +0 -0
  129. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_error_boundary.py +0 -0
  130. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
  131. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
  132. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
  133. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
  134. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
  135. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
  136. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
  137. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_forking.py +0 -0
  138. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
  139. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
  140. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
  141. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
  142. {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
  143. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
  144. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
  145. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
  146. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
  147. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_performance.py +0 -0
  148. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
  149. {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
  150. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
  151. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
  152. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig.py +0 -0
  153. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
  154. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
  155. {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
  156. {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
  157. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
  158. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
  159. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-pyo3/tests/utils.py +0 -0
  160. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/build.rs +0 -0
  161. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ip_supalite.table +0 -0
  162. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
  163. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
  164. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
  165. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/mod.rs +0 -0
  166. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
  167. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
  168. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
  169. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
  170. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/compression/mod.rs +0 -0
  171. {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
  172. {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
  173. {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
  174. {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
  175. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/console_capture/mod.rs +0 -0
  176. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/data_store_interface.rs +0 -0
  177. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/dcs_str.rs +0 -0
  178. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
  179. {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
  180. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
  181. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
  182. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
  183. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
  184. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
  185. {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
  186. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
  187. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
  188. {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
  189. {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
  190. {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
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {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
  197. {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
  198. {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
  199. {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
  200. {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
  201. {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
  202. {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
  203. {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
  204. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
  205. {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
  206. {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
  207. {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
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {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
  217. {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
  218. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
  219. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
  220. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
  221. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
  222. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/mod.rs +0 -0
  223. {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
  224. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
  225. {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
  226. {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
  227. {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
  228. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
  229. {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
  230. {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
  231. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
  232. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/mod.rs +0 -0
  233. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
  234. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/gcir/timing.rs +0 -0
  235. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/global_configs.rs +0 -0
  236. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/djb2.rs +0 -0
  237. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
  238. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
  239. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/hashing/mod.rs +0 -0
  240. {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
  241. {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
  242. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
  243. {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
  244. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/init_details.rs +0 -0
  245. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
  246. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_response.rs +0 -0
  247. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
  248. {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
  249. {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
  250. {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
  251. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/lib.rs +0 -0
  252. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/logging_utils.rs +0 -0
  253. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/macros.rs +0 -0
  254. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
  255. {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
  256. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/http_types.rs +0 -0
  257. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/mod.rs +0 -0
  258. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/network_client.rs +0 -0
  259. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/network_error.rs +0 -0
  260. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
  261. {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
  262. {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
  263. {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
  264. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
  265. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
  266. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
  267. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/mod.rs +0 -0
  268. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
  269. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
  270. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
  271. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/output_logger.rs +0 -0
  272. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
  273. {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
  274. {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
  275. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
  276. {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
  277. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
  278. {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
  279. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
  280. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
  281. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
  282. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
  283. {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
  284. {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
  285. {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
  286. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
  287. {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
  288. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
  289. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
  290. {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
  291. {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
  292. {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
  293. {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
  294. {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
  295. {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
  296. {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
  297. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
  298. {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
  299. {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
  300. {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
  301. {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
  302. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
  303. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/mod.rs +0 -0
  304. {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
  305. {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
  306. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
  307. {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
  308. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
  309. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_err.rs +0 -0
  310. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_global.rs +0 -0
  311. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_metadata.rs +0 -0
  312. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_options.rs +0 -0
  313. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_runtime.rs +0 -0
  314. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
  315. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_types.rs +0 -0
  316. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
  317. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/into_optional.rs +0 -0
  318. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/mod.rs +0 -0
  319. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
  320. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
  321. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/unit_id.rs +0 -0
  322. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/user_data.rs +0 -0
  323. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/user/user_value.rs +0 -0
  324. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/utils/mod.rs +0 -0
  325. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/src/value_parsing.rs +0 -0
  326. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
  327. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
  328. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
  329. {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
  330. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/company_id_list +0 -0
  331. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_error.json +0 -0
  332. {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
  333. {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
  334. {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
  335. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
  336. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
  337. {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
  338. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
  339. {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
  340. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
  341. {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
  342. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
  343. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
  344. {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
  345. {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
  346. {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
  347. {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
  348. {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
  349. {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
  350. {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
  351. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
  352. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
  353. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
  354. {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
  355. {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
  356. {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
  357. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
  358. {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
  359. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
  360. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
  361. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
  362. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
  363. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
  364. {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
  365. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
  366. {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
  367. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
  368. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
  369. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
  370. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/exposure_tests.rs +0 -0
  371. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/flushing_tests.rs +0 -0
  372. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
  373. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/gcir_tests.rs +0 -0
  374. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/global_configs_test.rs +0 -0
  375. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
  376. {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
  377. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
  378. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
  379. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
  380. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
  381. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
  382. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_client_tests.rs +0 -0
  383. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
  384. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
  385. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
  386. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
  387. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/perf_tests.rs +0 -0
  388. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
  389. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
  390. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
  391. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
  392. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
  393. {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
  394. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_global_tests.rs +0 -0
  395. {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
  396. {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
  397. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
  398. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
  399. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_tests.rs +0 -0
  400. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
  401. {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
  402. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
  403. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
  404. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
  405. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
  406. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
  407. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
  408. {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
  409. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/user_json_tests.rs +0 -0
  410. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
  411. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/helpers.rs +0 -0
  412. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
  413. {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
  414. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
  415. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
  416. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
  417. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
  418. {oai_statsig_python_core-0.26.0rc2 → oai_statsig_python_core-0.27.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
  419. {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.174"
1416
+ version = "0.2.186"
1407
1417
  source = "registry+https://github.com/rust-lang/crates.io-index"
1408
- checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
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.26.0-rc.2"
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.26.0-rc.2"
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.26.0-rc.2"
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.26.0-rc.2"
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.26.0-rc.2"
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.26.0-rc.2"
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"
@@ -26,7 +26,7 @@ exclude = [
26
26
  [workspace.package]
27
27
  edition = "2021"
28
28
  license = "ISC"
29
- version = "0.26.0-rc.2"
29
+ version = "0.27.0"
30
30
  homepage = "https://statsig.com/"
31
31
  authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
32
32
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oai_statsig_python_core
3
- Version: 0.26.0rc2
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
@@ -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.26.0-rc.2", optional = true }
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(InternedString::from_str_ref(&cmab.id_type.value));
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(InternedString::from_dynamic_string(&cmab.id_type));
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(InternedString::from_dynamic_string(&cmab.id_type));
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::evaluate(ctx, targeting_gate_name.as_str(), &SpecType::Gate) {
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::from_str_ref(&group.name));
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 = Some(InternedString::from_str_ref(&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::from_str_ref(&best_group.name));
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::MemoizedEvaluatorValue,
3
- specs_response::spec_types::ConditionOperator, unwrap_or_return,
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: &MemoizedEvaluatorValue,
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::MemoizedEvaluatorValue, log_w, unwrap_or_return,
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: &MemoizedEvaluatorValue,
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 &regex_value.regex_value {
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::MemoizedEvaluatorValue,
3
- specs_response::spec_types::ConditionOperator, unwrap_or_return,
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: &MemoizedEvaluatorValue,
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: &MemoizedEvaluatorValue,
31
+ target_value: EvaluatorValueRef<'_>,
32
32
  op: ConditionOperator,
33
33
  ignore_case: bool,
34
34
  ) -> bool {
35
- if let Some(keyed_lookup) = &target_value.object_value {
36
- if matches!(op, ConditionOperator::Any | ConditionOperator::NoneOf) {
37
- let contains = match value.lowercased_lookup_key() {
38
- Some(key) => keyed_lookup.contains_key(key),
39
- None => value
40
- .lowercased_string_value()
41
- .is_some_and(|lowercased_value| {
42
- keyed_lookup
43
- .keys()
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
- let array_value = unwrap_or_return!(&target_value.array_value, false);
46
+ unwrap_or_return!(target_value.array_len(), false);
52
47
  if matches!(op, ConditionOperator::Any | ConditionOperator::NoneOf) {
53
- let contains = match value.lowercased_lookup_key() {
54
- Some(key) => array_value.contains_key(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(|lowercased_value| {
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
- let mut comparison_result = false;
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
- comparison_result = match op {
72
+ match op {
84
73
  ConditionOperator::Any
85
74
  | ConditionOperator::NoneOf
86
75
  | ConditionOperator::AnyCaseSensitive
87
- | ConditionOperator::NoneCaseSensitive => left == right.as_str(),
88
- ConditionOperator::StrStartsWithAny => left.starts_with(right.as_str()),
89
- ConditionOperator::StrEndsWithAny => left.ends_with(right.as_str()),
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.as_str())
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::MemoizedEvaluatorValue,
3
- specs_response::spec_types::ConditionOperator, unwrap_or_return,
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: &MemoizedEvaluatorValue,
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
- .or(right.float_value.map(|x| x as i64)),
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::MemoizedEvaluatorValue,
3
- specs_response::spec_types::ConditionOperator, unwrap_or_return,
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: &MemoizedEvaluatorValue,
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 right_dyn_str = unwrap_or_return!(&right.string_value, false);
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,