oai-statsig-python-core 0.24.1__tar.gz → 0.24.2rc4__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 (387) hide show
  1. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/Cargo.lock +6 -6
  2. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/Cargo.toml +1 -1
  3. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/PKG-INFO +1 -1
  4. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/Cargo.toml +1 -1
  5. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/http_types.rs +1 -1
  6. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/network_client.rs +22 -4
  7. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/spec_store.rs +80 -3
  8. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +6 -0
  9. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +1 -0
  10. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +130 -3
  11. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/proto_specs.rs +409 -73
  12. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/spec_types.rs +5 -0
  13. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/observability_client_usage_tests.rs +47 -0
  14. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/__init__.py +0 -0
  15. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/data_store.py +0 -0
  16. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/error_boundary.py +0 -0
  17. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
  18. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/observability_client.py +0 -0
  19. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/output_logger_provider.py +0 -0
  20. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/persistent_storage.py +0 -0
  21. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/py.typed +0 -0
  22. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/requirements.txt +0 -0
  23. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/statsig.py +0 -0
  24. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
  25. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/py_src/statsig_python_core/statsig_types.py +0 -0
  26. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/pyproject.toml +0 -0
  27. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/Cargo.toml +0 -0
  28. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/README.md +0 -0
  29. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/build.rs +0 -0
  30. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/lib.rs +0 -0
  31. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
  32. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
  33. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
  34. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
  35. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
  36. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/.github/workflows/CI.yml +0 -0
  37. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/.gitignore +0 -0
  38. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/Cargo.toml +0 -0
  39. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/README.md +0 -0
  40. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
  41. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
  42. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
  43. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/data_store_base_py.rs +0 -0
  44. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
  45. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/interned_store_py.rs +0 -0
  46. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/lib.rs +0 -0
  47. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
  48. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
  49. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/pyo_utils.rs +0 -0
  50. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
  51. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/safe_gil.rs +0 -0
  52. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_base_py.rs +0 -0
  53. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
  54. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_options_py.rs +0 -0
  55. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
  56. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_types_py.rs +0 -0
  57. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/statsig_user_py.rs +0 -0
  58. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/unit_id_py.rs +0 -0
  59. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
  60. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
  61. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/fork_runner.py +0 -0
  62. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/mock_output_logger.py +0 -0
  63. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/mock_scrapi.py +0 -0
  64. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/profile_util.py +0 -0
  65. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
  66. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
  67. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_data_store.py +0 -0
  68. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_error_boundary.py +0 -0
  69. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
  70. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
  71. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
  72. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
  73. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_forking.py +0 -0
  74. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
  75. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
  76. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
  77. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
  78. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
  79. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_observability_client.py +0 -0
  80. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
  81. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_override_adapter.py +0 -0
  82. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_performance.py +0 -0
  83. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
  84. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
  85. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
  86. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_shutdown.py +0 -0
  87. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig.py +0 -0
  88. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig_options.py +0 -0
  89. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig_user.py +0 -0
  90. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
  91. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
  92. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
  93. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
  94. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-pyo3/tests/utils.py +0 -0
  95. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/build.rs +0 -0
  96. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/resources/ip_supalite.table +0 -0
  97. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
  98. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
  99. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
  100. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/__tests__/mod.rs +0 -0
  101. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
  102. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
  103. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
  104. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/compression/compression_helper.rs +0 -0
  105. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/compression/mod.rs +0 -0
  106. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
  107. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
  108. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
  109. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
  110. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/console_capture/mod.rs +0 -0
  111. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/data_store_interface.rs +0 -0
  112. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/dcs_str.rs +0 -0
  113. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
  114. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
  115. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
  116. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
  117. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
  118. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
  119. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
  120. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
  121. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
  122. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
  123. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
  124. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
  125. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
  126. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
  127. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
  128. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
  129. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
  130. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
  131. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
  132. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluator.rs +0 -0
  133. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
  134. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
  135. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
  136. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
  137. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/mod.rs +0 -0
  138. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
  139. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
  140. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
  141. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
  142. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
  143. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
  144. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
  145. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
  146. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
  147. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
  148. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
  149. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
  150. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
  151. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
  152. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
  153. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
  154. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
  155. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_logger.rs +0 -0
  156. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
  157. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
  158. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
  159. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
  160. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
  161. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
  162. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
  163. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
  164. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
  165. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
  166. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
  167. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
  168. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
  169. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
  170. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
  171. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
  172. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/flush_type.rs +0 -0
  173. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/mod.rs +0 -0
  174. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
  175. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
  176. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
  177. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
  178. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
  179. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
  180. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
  181. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
  182. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
  183. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
  184. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
  185. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/gcir_options.rs +0 -0
  186. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
  187. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
  188. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/mod.rs +0 -0
  189. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
  190. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
  191. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
  192. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/global_configs.rs +0 -0
  193. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/hashing/ahash.rs +0 -0
  194. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/hashing/djb2.rs +0 -0
  195. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/hashing/hash_util.rs +0 -0
  196. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
  197. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/hashing/mod.rs +0 -0
  198. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
  199. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
  200. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
  201. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
  202. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/init_details.rs +0 -0
  203. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
  204. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/initialize_response.rs +0 -0
  205. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/initialize_v2_response.rs +0 -0
  206. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/instance_registry.rs +0 -0
  207. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_string.rs +0 -0
  208. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/fixtures/interned_store_v1.mmap +0 -0
  209. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
  210. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -0
  211. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
  212. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
  213. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
  214. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/interned_store.rs +0 -0
  215. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/interned_values/mod.rs +0 -0
  216. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/lib.rs +0 -0
  217. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/logging_utils.rs +0 -0
  218. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/macros.rs +0 -0
  219. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
  220. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
  221. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/mod.rs +0 -0
  222. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/network_error.rs +0 -0
  223. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/providers/mod.rs +0 -0
  224. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
  225. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
  226. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
  227. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/networking/proxy_config.rs +0 -0
  228. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
  229. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
  230. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/mod.rs +0 -0
  231. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
  232. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/ops_stats.rs +0 -0
  233. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
  234. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/output_logger.rs +0 -0
  235. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/override_adapter/mod.rs +0 -0
  236. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
  237. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
  238. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
  239. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
  240. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/persistent_storage/mod.rs +0 -0
  241. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
  242. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
  243. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
  244. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
  245. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
  246. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
  247. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
  248. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
  249. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
  250. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
  251. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/mod.rs +0 -0
  252. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
  253. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
  254. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
  255. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
  256. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
  257. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
  258. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
  259. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
  260. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
  261. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
  262. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
  263. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
  264. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
  265. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/mod.rs +0 -0
  266. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
  267. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
  268. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
  269. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
  270. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig.rs +0 -0
  271. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_core_api_options.rs +0 -0
  272. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_err.rs +0 -0
  273. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_global.rs +0 -0
  274. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_metadata.rs +0 -0
  275. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_options.rs +0 -0
  276. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_runtime.rs +0 -0
  277. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_type_factories.rs +0 -0
  278. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_types.rs +0 -0
  279. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/statsig_types_raw.rs +0 -0
  280. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
  281. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/into_optional.rs +0 -0
  282. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/mod.rs +0 -0
  283. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/statsig_user.rs +0 -0
  284. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
  285. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
  286. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
  287. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/unit_id.rs +0 -0
  288. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/user_data.rs +0 -0
  289. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/user/user_value.rs +0 -0
  290. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/utils/mod.rs +0 -0
  291. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/src/value_parsing.rs +0 -0
  292. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/check_gate_tests.rs +0 -0
  293. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
  294. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/big_number_dcs.json +0 -0
  295. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
  296. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/company_id_list +0 -0
  297. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_error.json +0 -0
  298. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
  299. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
  300. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
  301. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
  302. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
  303. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
  304. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
  305. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
  306. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
  307. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
  308. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
  309. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/get_id_lists.json +0 -0
  310. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
  311. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
  312. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
  313. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
  314. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
  315. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
  316. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
  317. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
  318. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/test_user_agents.txt +0 -0
  319. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/ua_string_cases.json +0 -0
  320. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
  321. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
  322. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
  323. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
  324. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
  325. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
  326. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
  327. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
  328. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
  329. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
  330. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
  331. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
  332. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
  333. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
  334. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
  335. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
  336. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
  337. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
  338. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/exposure_tests.rs +0 -0
  339. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/flushing_tests.rs +0 -0
  340. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
  341. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/gcir_tests.rs +0 -0
  342. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/global_configs_test.rs +0 -0
  343. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
  344. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
  345. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
  346. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
  347. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/instance_registry_tests.rs +0 -0
  348. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
  349. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/list_methods_tests.rs +0 -0
  350. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
  351. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/network_client_tests.rs +0 -0
  352. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/network_failure_tests.rs +0 -0
  353. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/output_logger_tests.rs +0 -0
  354. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/override_adapter_tests.rs +0 -0
  355. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/perf_tests.rs +0 -0
  356. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
  357. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
  358. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/spec_types_tests.rs +0 -0
  359. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
  360. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
  361. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
  362. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_global_tests.rs +0 -0
  363. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
  364. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
  365. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_options_tests.rs +0 -0
  366. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
  367. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_tests.rs +0 -0
  368. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
  369. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
  370. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
  371. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
  372. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/statsig_user_tests.rs +0 -0
  373. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
  374. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/typed_getters_tests.rs +0 -0
  375. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
  376. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
  377. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/user_json_tests.rs +0 -0
  378. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
  379. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/helpers.rs +0 -0
  380. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
  381. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
  382. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
  383. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
  384. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
  385. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
  386. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
  387. {oai_statsig_python_core-0.24.1 → oai_statsig_python_core-0.24.2rc4}/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.24.1"
1725
+ version = "0.24.2-rc.4"
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.24.1"
1740
+ version = "0.24.2-rc.4"
1741
1741
  dependencies = [
1742
1742
  "ahash",
1743
1743
  "arc-swap",
@@ -3011,7 +3011,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
3011
3011
 
3012
3012
  [[package]]
3013
3013
  name = "statsig-node"
3014
- version = "0.24.1"
3014
+ version = "0.24.2-rc.4"
3015
3015
  dependencies = [
3016
3016
  "async-trait",
3017
3017
  "napi",
@@ -3026,7 +3026,7 @@ dependencies = [
3026
3026
 
3027
3027
  [[package]]
3028
3028
  name = "statsig-pyo3"
3029
- version = "0.24.1"
3029
+ version = "0.24.2-rc.4"
3030
3030
  dependencies = [
3031
3031
  "async-trait",
3032
3032
  "lazy_static",
@@ -3041,7 +3041,7 @@ dependencies = [
3041
3041
 
3042
3042
  [[package]]
3043
3043
  name = "statsig_elixir"
3044
- version = "0.24.1"
3044
+ version = "0.24.2-rc.4"
3045
3045
  dependencies = [
3046
3046
  "async-trait",
3047
3047
  "oai-statsig-rust",
@@ -3054,7 +3054,7 @@ dependencies = [
3054
3054
 
3055
3055
  [[package]]
3056
3056
  name = "statsig_ffi"
3057
- version = "0.24.1"
3057
+ version = "0.24.2-rc.4"
3058
3058
  dependencies = [
3059
3059
  "async-trait",
3060
3060
  "cbindgen",
@@ -20,7 +20,7 @@ exclude = [
20
20
  [workspace.package]
21
21
  edition = "2021"
22
22
  license = "ISC"
23
- version = "0.24.1"
23
+ version = "0.24.2-rc.4"
24
24
  homepage = "https://statsig.com/"
25
25
  authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
26
26
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oai_statsig_python_core
3
- Version: 0.24.1
3
+ Version: 0.24.2rc4
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -43,7 +43,7 @@ serde_json = { version = "1.0.143", features = [
43
43
  ] }
44
44
  serde_with = "3.4.0"
45
45
  sha2 = "0.10.8"
46
- oai-statsig-grpc = { path = "../statsig-grpc", version = "0.24.1", optional = true }
46
+ oai-statsig-grpc = { path = "../statsig-grpc", version = "0.24.2-rc.4", optional = true }
47
47
  simple_logger = { version = "5.0.0" }
48
48
  tempfile = "3.8.1"
49
49
  tokio = { version = "1.39.1", features = ["full"] }
@@ -204,7 +204,7 @@ impl ResponseData {
204
204
  Ok(buf)
205
205
  }
206
206
 
207
- fn rewind(&mut self) -> Result<(), StatsigErr> {
207
+ pub(crate) fn rewind(&mut self) -> Result<(), StatsigErr> {
208
208
  self.stream
209
209
  .rewind()
210
210
  .map_err(|e| StatsigErr::SerializationError(e.to_string()))
@@ -92,10 +92,10 @@ impl NetworkClient {
92
92
  opts.disable_network.unwrap_or(false),
93
93
  opts.proxy_config.clone(),
94
94
  ca_cert_pem,
95
- opts.log_event_connection_reuse.unwrap_or(false),
95
+ opts.log_event_connection_reuse.unwrap_or(true),
96
96
  )
97
97
  })
98
- .unwrap_or((false, None, None, false));
98
+ .unwrap_or((false, None, None, true));
99
99
 
100
100
  let sdk_instance_id = options
101
101
  .map(|opts| opts.get_sdk_instance_id(sdk_key))
@@ -549,10 +549,28 @@ fn get_error_message_for_status(
549
549
  mod tests {
550
550
  use super::{
551
551
  get_network_error_extra_tags, get_network_request_latency_tags, get_request_path,
552
- get_source_service_and_request_path, should_log_network_request_latency, DELTAS_USED_TAG,
553
- ID_LIST_FILE_ID_TAG, REQUEST_PATH_TAG, STATUS_CODE_TAG,
552
+ get_source_service_and_request_path, should_log_network_request_latency, NetworkClient,
553
+ DELTAS_USED_TAG, ID_LIST_FILE_ID_TAG, REQUEST_PATH_TAG, STATUS_CODE_TAG,
554
554
  };
555
555
  use crate::networking::{NetworkError, RequestArgs};
556
+ use crate::StatsigOptions;
557
+
558
+ #[test]
559
+ fn test_log_event_connection_reuse_defaults_to_true() {
560
+ assert!(NetworkClient::new("secret-test", None, None).log_event_connection_reuse);
561
+ assert!(
562
+ NetworkClient::new("secret-test", None, Some(&StatsigOptions::default()))
563
+ .log_event_connection_reuse
564
+ );
565
+
566
+ let options = StatsigOptions {
567
+ log_event_connection_reuse: Some(false),
568
+ ..StatsigOptions::default()
569
+ };
570
+ assert!(
571
+ !NetworkClient::new("secret-test", None, Some(&options)).log_event_connection_reuse
572
+ );
573
+ }
556
574
 
557
575
  #[test]
558
576
  fn test_get_request_path_with_sample_urls() {
@@ -31,6 +31,33 @@ pub struct SpecStoreData {
31
31
  }
32
32
 
33
33
  const TAG: &str = stringify!(SpecStore);
34
+ const RESPONSE_TYPE_TAG: &str = "response_type";
35
+ const DELTAS_USED_HEADER: &str = "x-deltas-used";
36
+
37
+ #[derive(Clone, Copy)]
38
+ enum ConfigResponseType {
39
+ Delta,
40
+ Full,
41
+ NoUpdate,
42
+ }
43
+
44
+ impl ConfigResponseType {
45
+ fn from_applied_response_data(data: &ResponseData) -> Self {
46
+ if data.get_header_ref(DELTAS_USED_HEADER).is_some() {
47
+ Self::Delta
48
+ } else {
49
+ Self::Full
50
+ }
51
+ }
52
+
53
+ fn as_str(self) -> &'static str {
54
+ match self {
55
+ Self::Delta => "delta",
56
+ Self::Full => "full",
57
+ Self::NoUpdate => "no_update",
58
+ }
59
+ }
60
+ }
34
61
 
35
62
  pub struct SpecStore {
36
63
  pub data: Arc<RwLock<SpecStoreData>>,
@@ -201,11 +228,17 @@ impl SpecStore {
201
228
  PrepResult::HasUpdates(next_values, response_format) => (next_values, response_format),
202
229
  PrepResult::CurrentValuesNewer => return Ok(()),
203
230
  PrepResult::NoUpdates => {
204
- self.ops_stats_log_no_update(specs_update.source, specs_update.source_api);
231
+ self.ops_stats_log_no_update(
232
+ specs_update.source,
233
+ specs_update.source_api,
234
+ ConfigResponseType::NoUpdate,
235
+ );
205
236
  return Ok(());
206
237
  }
207
238
  };
208
239
 
240
+ let response_type = ConfigResponseType::from_applied_response_data(&specs_update.data);
241
+
209
242
  // --- Apply ---
210
243
 
211
244
  let apply_result = self
@@ -219,7 +252,7 @@ impl SpecStore {
219
252
 
220
253
  // --- Notify ---
221
254
 
222
- self.specs_update_notify(response_format, specs_update, apply_result)
255
+ self.specs_update_notify(response_format, response_type, specs_update, apply_result)
223
256
  .map_err(|e| {
224
257
  log_error_to_statsig_and_console!(self.ops_stats, TAG, e);
225
258
  e
@@ -360,6 +393,7 @@ impl SpecStore {
360
393
  fn specs_update_notify(
361
394
  &self,
362
395
  response_format: SpecsFormat,
396
+ response_type: ConfigResponseType,
363
397
  specs_update: SpecsUpdate,
364
398
  apply_result: ApplyResult,
365
399
  ) -> Result<(), StatsigErr> {
@@ -399,6 +433,7 @@ impl SpecStore {
399
433
  &prev_source,
400
434
  source_api,
401
435
  response_format,
436
+ response_type,
402
437
  );
403
438
 
404
439
  Ok(())
@@ -630,7 +665,12 @@ async fn write_specs_to_data_store(
630
665
  // -------------------------------------------------------------------------------------------- [ OpsStats Helpers ]
631
666
 
632
667
  impl SpecStore {
633
- fn ops_stats_log_no_update(&self, source: SpecsSource, source_api: Option<String>) {
668
+ fn ops_stats_log_no_update(
669
+ &self,
670
+ source: SpecsSource,
671
+ source_api: Option<String>,
672
+ response_type: ConfigResponseType,
673
+ ) {
634
674
  log_d!(TAG, "No Updates");
635
675
  self.ops_stats.log(ObservabilityEvent::new_event(
636
676
  MetricType::Increment,
@@ -639,6 +679,10 @@ impl SpecStore {
639
679
  Some(HashMap::from([
640
680
  ("source".to_string(), source.to_string()),
641
681
  ("source_api".to_string(), source_api.unwrap_or_default()),
682
+ (
683
+ RESPONSE_TYPE_TAG.to_string(),
684
+ response_type.as_str().to_string(),
685
+ ),
642
686
  ])),
643
687
  ));
644
688
  }
@@ -652,6 +696,7 @@ impl SpecStore {
652
696
  prev_source: &SpecsSource,
653
697
  source_api: Option<String>,
654
698
  response_format: SpecsFormat,
699
+ response_type: ConfigResponseType,
655
700
  ) {
656
701
  let delay = (Utc::now().timestamp_millis() as u64).saturating_sub(lcut);
657
702
  log_d!(TAG, "Updated ({:?})", source);
@@ -674,6 +719,10 @@ impl SpecStore {
674
719
  "response_format".to_string(),
675
720
  Into::<&str>::into(&response_format).to_string(),
676
721
  ),
722
+ (
723
+ RESPONSE_TYPE_TAG.to_string(),
724
+ response_type.as_str().to_string(),
725
+ ),
677
726
  ])),
678
727
  ));
679
728
  }
@@ -758,3 +807,31 @@ impl IdListsUpdateListener for SpecStore {
758
807
  }
759
808
  }
760
809
  }
810
+
811
+ #[cfg(test)]
812
+ mod tests {
813
+ use super::{ConfigResponseType, DELTAS_USED_HEADER};
814
+ use crate::networking::ResponseData;
815
+ use std::collections::HashMap;
816
+
817
+ #[test]
818
+ fn applied_response_type_uses_delta_header() {
819
+ let delta_data = ResponseData::from_bytes_with_headers(
820
+ Vec::new(),
821
+ Some(HashMap::from([(
822
+ DELTAS_USED_HEADER.to_string(),
823
+ "true".to_string(),
824
+ )])),
825
+ );
826
+ let full_data = ResponseData::from_bytes(Vec::new());
827
+
828
+ assert_eq!(
829
+ ConfigResponseType::from_applied_response_data(&delta_data).as_str(),
830
+ "delta"
831
+ );
832
+ assert_eq!(
833
+ ConfigResponseType::from_applied_response_data(&full_data).as_str(),
834
+ "full"
835
+ );
836
+ }
837
+ }
@@ -14,6 +14,7 @@ const CONFIG_SYNC_OVERALL_ERROR_TAG: &str = "error";
14
14
  const CONFIG_SYNC_OVERALL_NETWORK_SUCCESS_TAG: &str = "network_success";
15
15
  const CONFIG_SYNC_OVERALL_PROCESS_SUCCESS_TAG: &str = "process_success";
16
16
  const CONFIG_SYNC_OVERALL_DELTAS_USED_TAG: &str = "deltas_used";
17
+ const CONFIG_SYNC_OVERALL_RESPONSE_TYPE_TAG: &str = "response_type";
17
18
 
18
19
  #[allow(clippy::too_many_arguments)]
19
20
  pub fn log_config_sync_overall_latency(
@@ -25,6 +26,7 @@ pub fn log_config_sync_overall_latency(
25
26
  process_success: bool,
26
27
  error: String,
27
28
  deltas_used: bool,
29
+ response_type: &str,
28
30
  ) {
29
31
  let latency_ms = (Utc::now().timestamp_millis() as u64).saturating_sub(sync_start_ms) as f64;
30
32
  ops_stats.log(ObservabilityEvent::new_event(
@@ -57,6 +59,10 @@ pub fn log_config_sync_overall_latency(
57
59
  CONFIG_SYNC_OVERALL_DELTAS_USED_TAG.to_string(),
58
60
  deltas_used.to_string(),
59
61
  ),
62
+ (
63
+ CONFIG_SYNC_OVERALL_RESPONSE_TYPE_TAG.to_string(),
64
+ response_type.to_string(),
65
+ ),
60
66
  ])),
61
67
  ));
62
68
  }
@@ -325,6 +325,7 @@ impl StatsigDataStoreSpecsAdapter {
325
325
  .err()
326
326
  .map_or_else(String::new, |e| e.to_string()),
327
327
  false,
328
+ "datastore",
328
329
  );
329
330
  }
330
331
 
@@ -6,6 +6,7 @@ use crate::observability::sdk_errors_observer::ErrorBoundaryEvent;
6
6
  use crate::sdk_diagnostics::diagnostics::ContextType;
7
7
  use crate::sdk_diagnostics::marker::{ActionType, KeyType, Marker, StepType};
8
8
  use crate::specs_adapter::{SpecsAdapter, SpecsUpdate, SpecsUpdateListener};
9
+ use crate::specs_response::spec_types::SpecsResponseNoUpdates;
9
10
  use crate::statsig_err::StatsigErr;
10
11
  use crate::statsig_metadata::StatsigMetadata;
11
12
  use crate::utils::get_api_from_url;
@@ -69,6 +70,50 @@ impl NetworkSyncOutcome {
69
70
  matches!(self, Self::Success)
70
71
  }
71
72
  }
73
+
74
+ enum ConfigSyncResponseType {
75
+ Delta,
76
+ Full,
77
+ NoUpdate,
78
+ NetworkError,
79
+ }
80
+
81
+ impl ConfigSyncResponseType {
82
+ fn from_response_data(data: &mut ResponseData) -> Self {
83
+ if is_true_header(data, "x-cache-hit") {
84
+ return Self::NoUpdate;
85
+ }
86
+
87
+ if data.get_header_ref("x-deltas-used").is_some() {
88
+ return Self::Delta;
89
+ }
90
+
91
+ let response_type = match data.deserialize_into::<SpecsResponseNoUpdates>() {
92
+ Ok(response) if !response.has_updates => Self::NoUpdate,
93
+ _ => Self::Full,
94
+ };
95
+ let _ = data.rewind();
96
+ response_type
97
+ }
98
+
99
+ fn as_str(&self) -> &'static str {
100
+ match self {
101
+ Self::Delta => "delta",
102
+ Self::Full => "full",
103
+ Self::NoUpdate => "no_update",
104
+ Self::NetworkError => "network_error",
105
+ }
106
+ }
107
+ }
108
+
109
+ fn is_true_header(data: &ResponseData, key: &str) -> bool {
110
+ data.get_header_ref(key)
111
+ .is_some_and(|value| value.eq_ignore_ascii_case("true"))
112
+ }
113
+
114
+ fn is_process_success(result: &Result<(), StatsigErr>) -> bool {
115
+ result.is_ok()
116
+ }
72
117
  // OB client -- END
73
118
 
74
119
  impl StatsigHttpSpecsAdapter {
@@ -332,9 +377,14 @@ impl StatsigHttpSpecsAdapter {
332
377
 
333
378
  let sync_start_ms = Utc::now().timestamp_millis() as u64;
334
379
  let mut deltas_used = self.use_deltas_next_request.load(Ordering::SeqCst);
335
- let response = self
380
+ let mut response = self
336
381
  .fetch_specs_from_network(current_specs_info.clone(), trigger)
337
382
  .await;
383
+ let mut response_type = response
384
+ .as_mut()
385
+ .map_or(ConfigSyncResponseType::NetworkError, |response| {
386
+ ConfigSyncResponseType::from_response_data(&mut response.data)
387
+ });
338
388
  let (mut source_api, mut response_format, mut network_success) = match &response {
339
389
  Ok(response) => (
340
390
  response.loggable_api.clone(),
@@ -360,7 +410,12 @@ impl StatsigHttpSpecsAdapter {
360
410
  log_d!(TAG, "Falling back to DCS CDN");
361
411
  let fallback_args = self.get_request_args(&current_specs_info, trigger);
362
412
  deltas_used = fallback_args.deltas_enabled;
363
- let response = self.handle_fallback_request(fallback_args).await;
413
+ let mut response = self.handle_fallback_request(fallback_args).await;
414
+ response_type = response
415
+ .as_mut()
416
+ .map_or(ConfigSyncResponseType::NetworkError, |response| {
417
+ ConfigSyncResponseType::from_response_data(&mut response.data)
418
+ });
364
419
  match &response {
365
420
  Ok(response) => {
366
421
  source_api = response.loggable_api.clone();
@@ -382,7 +437,7 @@ impl StatsigHttpSpecsAdapter {
382
437
  result = self.process_spec_data(response).await;
383
438
  }
384
439
 
385
- let process_success = !matches!(result.as_ref(), Err(StatsigErr::NetworkError(_)));
440
+ let process_success = is_process_success(&result);
386
441
  log_config_sync_overall_latency(
387
442
  &self.ops_stats,
388
443
  sync_start_ms,
@@ -395,6 +450,7 @@ impl StatsigHttpSpecsAdapter {
395
450
  .err()
396
451
  .map_or_else(String::new, |e| e.to_string()),
397
452
  deltas_used,
453
+ response_type.as_str(),
398
454
  );
399
455
 
400
456
  result
@@ -698,6 +754,16 @@ mod tests {
698
754
  );
699
755
  }
700
756
 
757
+ #[test]
758
+ fn test_checksum_failure_is_not_process_success() {
759
+ let result = Err(StatsigErr::ChecksumFailure(
760
+ "simulated checksum failure".to_string(),
761
+ ));
762
+
763
+ assert!(!is_process_success(&result));
764
+ assert!(is_process_success(&Ok(())));
765
+ }
766
+
701
767
  #[test]
702
768
  fn test_fallback_uses_openai_cdn_for_non_default_specs_url() {
703
769
  let options = StatsigOptions {
@@ -713,6 +779,67 @@ mod tests {
713
779
  assert_eq!(adapter.fallback_url.as_deref(), Some(DEFAULT_SPECS_URL));
714
780
  }
715
781
 
782
+ #[test]
783
+ fn test_config_sync_response_type_delta() {
784
+ let mut headers = HashMap::new();
785
+ headers.insert("x-deltas-used".to_string(), "true".to_string());
786
+ let mut data = ResponseData::from_bytes_with_headers(
787
+ b"{\"has_updates\": false}".to_vec(),
788
+ Some(headers),
789
+ );
790
+
791
+ let response_type = ConfigSyncResponseType::from_response_data(&mut data);
792
+
793
+ assert_eq!(response_type.as_str(), "delta");
794
+ }
795
+
796
+ #[test]
797
+ fn test_config_sync_response_type_no_update() {
798
+ let mut data = ResponseData::from_bytes(b"{\"has_updates\": false}".to_vec());
799
+
800
+ let response_type = ConfigSyncResponseType::from_response_data(&mut data);
801
+
802
+ assert_eq!(response_type.as_str(), "no_update");
803
+ let response = data.deserialize_into::<SpecsResponseNoUpdates>().unwrap();
804
+ assert!(!response.has_updates);
805
+ }
806
+
807
+ #[test]
808
+ fn test_config_sync_response_type_no_update_with_delta_header() {
809
+ let mut headers = HashMap::new();
810
+ headers.insert("x-cache-hit".to_string(), "true".to_string());
811
+ headers.insert("x-deltas-used".to_string(), "true".to_string());
812
+ let mut data = ResponseData::from_bytes_with_headers(
813
+ b"{\"has_updates\": false}".to_vec(),
814
+ Some(headers),
815
+ );
816
+
817
+ let response_type = ConfigSyncResponseType::from_response_data(&mut data);
818
+
819
+ assert_eq!(response_type.as_str(), "no_update");
820
+ }
821
+
822
+ #[test]
823
+ fn test_config_sync_response_type_full() {
824
+ let mut data = ResponseData::from_bytes(b"{\"has_updates\": true}".to_vec());
825
+
826
+ let response_type = ConfigSyncResponseType::from_response_data(&mut data);
827
+
828
+ assert_eq!(response_type.as_str(), "full");
829
+ }
830
+
831
+ #[test]
832
+ fn test_config_sync_response_type_full_for_non_json_payload() {
833
+ let mut data = ResponseData::from_bytes(vec![0, 1, 2]);
834
+
835
+ let response_type = ConfigSyncResponseType::from_response_data(&mut data);
836
+
837
+ assert_eq!(response_type.as_str(), "full");
838
+ let mut first_byte = [1];
839
+ data.get_stream_mut().read_exact(&mut first_byte).unwrap();
840
+ assert_eq!(first_byte, [0]);
841
+ }
842
+
716
843
  #[test]
717
844
  fn test_get_response_format_json() {
718
845
  let mut headers = HashMap::new();