statsig-python-core 0.13.0__tar.gz → 0.13.1b2512030239__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 (340) hide show
  1. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/Cargo.lock +6 -6
  2. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/Cargo.toml +1 -1
  3. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/PKG-INFO +1 -1
  4. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/Cargo.toml +2 -1
  5. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluator_result.rs +108 -0
  6. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/lib.rs +1 -0
  7. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +93 -0
  8. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_event_emitter/event_types.rs +1 -0
  9. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig.rs +166 -0
  10. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_metadata.rs +1 -1
  11. statsig_python_core-0.13.1b2512030239/statsig-rust/src/statsig_types_raw.rs +125 -0
  12. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +1 -0
  13. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/__init__.py +0 -0
  14. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/data_store.py +0 -0
  15. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/error_boundary.py +0 -0
  16. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/observability_client.py +0 -0
  17. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/output_logger_provider.py +0 -0
  18. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/persistent_storage.py +0 -0
  19. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/py.typed +0 -0
  20. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/requirements.txt +0 -0
  21. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/statsig.py +0 -0
  22. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
  23. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/pyproject.toml +0 -0
  24. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/Cargo.toml +0 -0
  25. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/README.md +0 -0
  26. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/build.rs +0 -0
  27. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/src/lib.rs +0 -0
  28. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
  29. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
  30. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
  31. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
  32. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/.github/workflows/CI.yml +0 -0
  33. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/.gitignore +0 -0
  34. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/Cargo.toml +0 -0
  35. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/README.md +0 -0
  36. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/__init__.py +0 -0
  37. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/data_store.py +0 -0
  38. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/error_boundary.py +0 -0
  39. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/observability_client.py +0 -0
  40. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/output_logger_provider.py +0 -0
  41. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/persistent_storage.py +0 -0
  42. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/py.typed +0 -0
  43. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/requirements.txt +0 -0
  44. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/statsig.py +0 -0
  45. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
  46. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
  47. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/data_store_base_py.rs +0 -0
  48. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/lib.rs +0 -0
  49. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
  50. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
  51. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/pyo_utils.rs +0 -0
  52. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/safe_gil.rs +0 -0
  53. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_base_py.rs +0 -0
  54. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
  55. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_options_py.rs +0 -0
  56. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
  57. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_types_py.rs +0 -0
  58. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/statsig_user_py.rs +0 -0
  59. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/unit_id_py.rs +0 -0
  60. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
  61. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/fork_runner.py +0 -0
  62. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/mock_scrapi.py +0 -0
  63. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
  64. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_data_store.py +0 -0
  65. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_error_boundary.py +0 -0
  66. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
  67. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_forking.py +0 -0
  68. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
  69. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_observability_client.py +0 -0
  70. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
  71. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_override_adapter.py +0 -0
  72. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
  73. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_shutdown.py +0 -0
  74. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_statsig.py +0 -0
  75. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_statsig_options.py +0 -0
  76. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_statsig_user.py +0 -0
  77. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
  78. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-pyo3/tests/utils.py +0 -0
  79. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/build.rs +0 -0
  80. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/resources/ip_supalite.table +0 -0
  81. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
  82. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
  83. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
  84. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/__tests__/mod.rs +0 -0
  85. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
  86. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/compression/compression_helper.rs +0 -0
  87. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/compression/mod.rs +0 -0
  88. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
  89. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
  90. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
  91. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
  92. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/console_capture/mod.rs +0 -0
  93. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/data_store_interface.rs +0 -0
  94. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/dcs_str.rs +0 -0
  95. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
  96. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
  97. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
  98. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
  99. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
  100. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
  101. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
  102. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
  103. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
  104. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
  105. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
  106. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
  107. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
  108. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
  109. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
  110. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
  111. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
  112. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
  113. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluator.rs +0 -0
  114. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
  115. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
  116. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
  117. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/mod.rs +0 -0
  118. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
  119. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
  120. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
  121. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
  122. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
  123. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
  124. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
  125. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
  126. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
  127. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
  128. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
  129. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
  130. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
  131. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
  132. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
  133. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_logger.rs +0 -0
  134. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
  135. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
  136. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
  137. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
  138. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
  139. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
  140. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
  141. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
  142. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
  143. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
  144. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
  145. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
  146. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
  147. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
  148. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
  149. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/flush_type.rs +0 -0
  150. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/mod.rs +0 -0
  151. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
  152. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
  153. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
  154. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
  155. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
  156. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
  157. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
  158. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
  159. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
  160. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
  161. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/gcir_options.rs +0 -0
  162. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
  163. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
  164. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/mod.rs +0 -0
  165. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
  166. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
  167. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
  168. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/global_configs.rs +0 -0
  169. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/hashing/ahash.rs +0 -0
  170. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/hashing/djb2.rs +0 -0
  171. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/hashing/hash_util.rs +0 -0
  172. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
  173. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/hashing/mod.rs +0 -0
  174. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
  175. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
  176. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
  177. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
  178. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/init_details.rs +0 -0
  179. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
  180. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/initialize_response.rs +0 -0
  181. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/initialize_v2_response.rs +0 -0
  182. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/instance_registry.rs +0 -0
  183. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/interned_string.rs +0 -0
  184. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/interned_value_store.rs +0 -0
  185. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/macros.rs +0 -0
  186. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
  187. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
  188. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/http_types.rs +0 -0
  189. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/mod.rs +0 -0
  190. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/network_client.rs +0 -0
  191. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/network_error.rs +0 -0
  192. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/providers/mod.rs +0 -0
  193. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
  194. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
  195. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
  196. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/networking/proxy_config.rs +0 -0
  197. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
  198. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
  199. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/mod.rs +0 -0
  200. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
  201. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/ops_stats.rs +0 -0
  202. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
  203. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/output_logger.rs +0 -0
  204. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/override_adapter/mod.rs +0 -0
  205. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
  206. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
  207. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
  208. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
  209. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/persistent_storage/mod.rs +0 -0
  210. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
  211. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
  212. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
  213. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
  214. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
  215. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
  216. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
  217. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
  218. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/spec_store.rs +0 -0
  219. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/mod.rs +0 -0
  220. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
  221. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
  222. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
  223. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
  224. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
  225. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
  226. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
  227. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
  228. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
  229. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
  230. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
  231. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
  232. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
  233. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/mod.rs +0 -0
  234. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
  235. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
  236. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
  237. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/spec_types.rs +0 -0
  238. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
  239. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
  240. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_core_api_options.rs +0 -0
  241. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_err.rs +0 -0
  242. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_global.rs +0 -0
  243. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_options.rs +0 -0
  244. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_runtime.rs +0 -0
  245. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_type_factories.rs +0 -0
  246. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/statsig_types.rs +0 -0
  247. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/into_optional.rs +0 -0
  248. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/mod.rs +0 -0
  249. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/statsig_user.rs +0 -0
  250. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
  251. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
  252. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
  253. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/unit_id.rs +0 -0
  254. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/user/user_data.rs +0 -0
  255. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/src/utils/mod.rs +0 -0
  256. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/check_gate_tests.rs +0 -0
  257. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
  258. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/big_number_dcs.json +0 -0
  259. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
  260. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/company_id_list +0 -0
  261. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
  262. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
  263. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
  264. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
  265. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
  266. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
  267. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
  268. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
  269. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/get_id_lists.json +0 -0
  270. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
  271. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
  272. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
  273. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
  274. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
  275. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
  276. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
  277. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
  278. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/test_user_agents.txt +0 -0
  279. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data/ua_string_cases.json +0 -0
  280. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
  281. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
  282. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
  283. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
  284. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
  285. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
  286. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
  287. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
  288. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
  289. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
  290. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
  291. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
  292. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/exposure_tests.rs +0 -0
  293. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/flushing_tests.rs +0 -0
  294. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
  295. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/gcir_tests.rs +0 -0
  296. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/global_configs_test.rs +0 -0
  297. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
  298. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
  299. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
  300. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
  301. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/instance_registry_tests.rs +0 -0
  302. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
  303. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/list_methods_tests.rs +0 -0
  304. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
  305. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/network_client_tests.rs +0 -0
  306. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/network_failure_tests.rs +0 -0
  307. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
  308. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/output_logger_tests.rs +0 -0
  309. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/override_adapter_tests.rs +0 -0
  310. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/perf_tests.rs +0 -0
  311. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
  312. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/spec_types_tests.rs +0 -0
  313. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
  314. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
  315. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_global_tests.rs +0 -0
  316. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
  317. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
  318. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_options_tests.rs +0 -0
  319. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
  320. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_tests.rs +0 -0
  321. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
  322. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
  323. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
  324. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
  325. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/statsig_user_tests.rs +0 -0
  326. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
  327. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/typed_getters_tests.rs +0 -0
  328. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
  329. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
  330. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/user_agent_tests_third_party.rs +0 -0
  331. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/user_json_tests.rs +0 -0
  332. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/helpers.rs +0 -0
  333. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
  334. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
  335. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
  336. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
  337. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
  338. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
  339. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
  340. {statsig_python_core-0.13.0 → statsig_python_core-0.13.1b2512030239}/statsig-rust/tests/utils/mod.rs +0 -0
@@ -2528,7 +2528,7 @@ dependencies = [
2528
2528
 
2529
2529
  [[package]]
2530
2530
  name = "sigstat-grpc"
2531
- version = "0.13.0"
2531
+ version = "0.13.1-beta.2512030239"
2532
2532
  dependencies = [
2533
2533
  "async-trait",
2534
2534
  "chrono",
@@ -2602,7 +2602,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2602
2602
 
2603
2603
  [[package]]
2604
2604
  name = "statsig-node"
2605
- version = "0.13.0"
2605
+ version = "0.13.1-beta.2512030239"
2606
2606
  dependencies = [
2607
2607
  "async-trait",
2608
2608
  "napi",
@@ -2616,7 +2616,7 @@ dependencies = [
2616
2616
 
2617
2617
  [[package]]
2618
2618
  name = "statsig-pyo3"
2619
- version = "0.13.0"
2619
+ version = "0.13.1-beta.2512030239"
2620
2620
  dependencies = [
2621
2621
  "async-trait",
2622
2622
  "lazy_static",
@@ -2630,7 +2630,7 @@ dependencies = [
2630
2630
 
2631
2631
  [[package]]
2632
2632
  name = "statsig-rust"
2633
- version = "0.13.0"
2633
+ version = "0.13.1-beta.2512030239"
2634
2634
  dependencies = [
2635
2635
  "ahash",
2636
2636
  "arc-swap",
@@ -2676,7 +2676,7 @@ dependencies = [
2676
2676
 
2677
2677
  [[package]]
2678
2678
  name = "statsig_elixir"
2679
- version = "0.13.0"
2679
+ version = "0.13.1-beta.2512030239"
2680
2680
  dependencies = [
2681
2681
  "parking_lot",
2682
2682
  "rustler",
@@ -2688,7 +2688,7 @@ dependencies = [
2688
2688
 
2689
2689
  [[package]]
2690
2690
  name = "statsig_ffi"
2691
- version = "0.13.0"
2691
+ version = "0.13.1-beta.2512030239"
2692
2692
  dependencies = [
2693
2693
  "async-trait",
2694
2694
  "cbindgen",
@@ -18,7 +18,7 @@ exclude = [
18
18
  [workspace.package]
19
19
  edition = "2021"
20
20
  license = "ISC"
21
- version = "0.13.0"
21
+ version = "0.13.1-beta.2512030239"
22
22
  homepage = "https://statsig.com/"
23
23
  authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
24
24
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: statsig_python_core
3
- Version: 0.13.0
3
+ Version: 0.13.1b2512030239
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -38,7 +38,7 @@ serde_json = { version = "1.0.143", features = [
38
38
  ] }
39
39
  serde_with = "3.4.0"
40
40
  sha2 = "0.10.8"
41
- sigstat-grpc = { path = "../statsig-grpc", version = "0.13.0", optional = true }
41
+ sigstat-grpc = { path = "../statsig-grpc", version = "0.13.1-beta.2512030239", optional = true }
42
42
  simple_logger = { version = "5.0.0" }
43
43
  tempfile = "3.8.1"
44
44
  tokio = { version = "1.39.1", features = ["full"] }
@@ -70,3 +70,4 @@ custom_network_provider = []
70
70
  with_grpc = ["sigstat-grpc"]
71
71
  testing = []
72
72
  with_zstd = []
73
+ ffi-support = []
@@ -20,6 +20,10 @@ use crate::evaluation::secondary_exposure_key::SecondaryExposureKey;
20
20
  use crate::hashing::{HashAlgorithm, HashUtil};
21
21
  use crate::interned_string::InternedString;
22
22
  use crate::specs_response::explicit_params::ExplicitParameters;
23
+ use crate::statsig_types_raw::{DynamicConfigRaw, ExperimentRaw, FeatureGateRaw, LayerRaw};
24
+ use crate::{log_e, EvaluationDetails};
25
+
26
+ const TAG: &str = "EvaluatorResult";
23
27
 
24
28
  #[derive(Default, Debug)]
25
29
  pub struct EvaluatorResult {
@@ -48,6 +52,31 @@ pub struct EvaluatorResult {
48
52
  pub parameter_rule_ids: Option<HashMap<InternedString, InternedString>>,
49
53
  }
50
54
 
55
+ pub fn result_to_gate_raw(
56
+ gate_name: &str,
57
+ eval_details: &EvaluationDetails,
58
+ result: Option<&EvaluatorResult>,
59
+ ) -> String {
60
+ let raw = match result {
61
+ Some(result) => FeatureGateRaw {
62
+ name: gate_name,
63
+ details: eval_details,
64
+ rule_id: result.rule_id.as_ref(),
65
+ id_type: result.id_type.as_ref(),
66
+ value: result.bool_value,
67
+ },
68
+ None => FeatureGateRaw::empty(gate_name, eval_details),
69
+ };
70
+
71
+ match serde_json::to_string(&raw) {
72
+ Ok(raw) => raw,
73
+ Err(e) => {
74
+ log_e!(TAG, "Failed to convert FeatureGateRaw to string: {}", e);
75
+ format!(r#"{{"name": "{}", "value": false}}"#, gate_name)
76
+ }
77
+ }
78
+ }
79
+
51
80
  pub fn result_to_gate_eval(gate_name: &str, result: &mut EvaluatorResult) -> GateEvaluation {
52
81
  GateEvaluation {
53
82
  base: result_to_base_eval(gate_name, result),
@@ -84,6 +113,33 @@ pub fn result_to_gate_eval_init_v2(
84
113
  }
85
114
  }
86
115
 
116
+ pub fn result_to_experiment_raw(
117
+ experiment_name: &str,
118
+ eval_details: &EvaluationDetails,
119
+ result: Option<&EvaluatorResult>,
120
+ ) -> String {
121
+ let raw = match result {
122
+ Some(result) => ExperimentRaw {
123
+ name: experiment_name,
124
+ value: result.json_value.as_ref(),
125
+ details: eval_details,
126
+ rule_id: result.rule_id.as_ref(),
127
+ id_type: result.id_type.as_ref(),
128
+ group_name: result.group_name.as_ref(),
129
+ is_experiment_active: Some(result.is_experiment_active),
130
+ },
131
+ None => ExperimentRaw::empty(experiment_name, eval_details),
132
+ };
133
+
134
+ match serde_json::to_string(&raw) {
135
+ Ok(raw) => raw,
136
+ Err(e) => {
137
+ log_e!(TAG, "Failed to convert ExperimentRaw to string: {}", e);
138
+ format!(r#"{{"name": "{}"}}"#, experiment_name)
139
+ }
140
+ }
141
+ }
142
+
87
143
  pub fn result_to_experiment_eval(
88
144
  experiment_name: &str,
89
145
  spec_entity: Option<&str>,
@@ -203,6 +259,33 @@ pub fn eval_result_to_experiment_eval(
203
259
  }
204
260
  }
205
261
 
262
+ pub fn result_to_layer_raw(
263
+ layer_name: &str,
264
+ eval_details: &EvaluationDetails,
265
+ result: Option<&EvaluatorResult>,
266
+ ) -> String {
267
+ let raw = match result {
268
+ Some(result) => LayerRaw {
269
+ name: layer_name,
270
+ details: eval_details,
271
+ rule_id: result.rule_id.as_ref(),
272
+ id_type: result.id_type.as_ref(),
273
+ group_name: result.group_name.as_ref(),
274
+ allocated_experiment_name: result.config_delegate.as_ref(),
275
+ is_experiment_active: Some(result.is_experiment_active),
276
+ },
277
+ None => LayerRaw::empty(layer_name, eval_details),
278
+ };
279
+
280
+ match serde_json::to_string(&raw) {
281
+ Ok(raw) => raw,
282
+ Err(e) => {
283
+ log_e!(TAG, "Failed to convert LayerRaw to string: {}", e);
284
+ format!(r#"{{"name": "{}"}}"#, layer_name)
285
+ }
286
+ }
287
+ }
288
+
206
289
  pub fn result_to_layer_eval(layer_name: &str, result: &mut EvaluatorResult) -> LayerEvaluation {
207
290
  let mut allocated_experiment_name = None;
208
291
  let mut is_experiment_active = None;
@@ -334,6 +417,31 @@ pub fn result_to_layer_eval_init_v2(
334
417
  }
335
418
  }
336
419
 
420
+ pub fn result_to_dynamic_config_raw(
421
+ dynamic_config_name: &str,
422
+ eval_details: &EvaluationDetails,
423
+ result: Option<&EvaluatorResult>,
424
+ ) -> String {
425
+ let raw = match result {
426
+ Some(result) => DynamicConfigRaw {
427
+ name: dynamic_config_name,
428
+ value: result.json_value.as_ref(),
429
+ details: eval_details,
430
+ rule_id: result.rule_id.as_ref(),
431
+ id_type: result.id_type.as_ref(),
432
+ },
433
+ None => DynamicConfigRaw::empty(dynamic_config_name, eval_details),
434
+ };
435
+
436
+ match serde_json::to_string(&raw) {
437
+ Ok(raw) => raw,
438
+ Err(e) => {
439
+ log_e!(TAG, "Failed to convert DynamicConfigRaw to string: {}", e);
440
+ format!(r#"{{"name": "{}"}}"#, dynamic_config_name)
441
+ }
442
+ }
443
+ }
444
+
337
445
  pub fn result_to_dynamic_config_eval(
338
446
  dynamic_config_name: &str,
339
447
  result: &mut EvaluatorResult,
@@ -56,6 +56,7 @@ pub mod statsig_metadata;
56
56
  pub mod statsig_options;
57
57
  pub mod statsig_runtime;
58
58
  pub mod statsig_types;
59
+ pub mod statsig_types_raw;
59
60
  pub mod user;
60
61
 
61
62
  mod dcs_str;
@@ -144,6 +144,29 @@ impl Statsig {
144
144
  });
145
145
  }
146
146
 
147
+ #[cfg(feature = "ffi-support")]
148
+ pub(crate) fn emit_gate_evaluated_parts(
149
+ &self,
150
+ gate_name: &str,
151
+ reason: &str,
152
+ eval_result: Option<&crate::evaluation::evaluator_result::EvaluatorResult>,
153
+ ) {
154
+ let mut rule_id = None;
155
+ let mut value = false;
156
+
157
+ if let Some(eval) = eval_result {
158
+ rule_id = eval.rule_id.as_ref().map(|r| r.as_str());
159
+ value = eval.bool_value;
160
+ }
161
+
162
+ self.emit(SdkEvent::GateEvaluated {
163
+ gate_name,
164
+ rule_id: rule_id.unwrap_or_default(),
165
+ value,
166
+ reason,
167
+ });
168
+ }
169
+
147
170
  pub(crate) fn emit_dynamic_config_evaluated(&self, config: &DynamicConfig) {
148
171
  self.emit(SdkEvent::DynamicConfigEvaluated {
149
172
  config_name: config.name.as_str(),
@@ -153,12 +176,62 @@ impl Statsig {
153
176
  });
154
177
  }
155
178
 
179
+ #[cfg(feature = "ffi-support")]
180
+ pub(crate) fn emit_dynamic_config_evaluated_parts(
181
+ &self,
182
+ config_name: &str,
183
+ reason: &str,
184
+ eval_result: Option<&crate::evaluation::evaluator_result::EvaluatorResult>,
185
+ ) {
186
+ let mut rule_id = None;
187
+ let mut value = None;
188
+
189
+ if let Some(eval) = eval_result {
190
+ rule_id = eval.rule_id.as_ref().map(|r| r.as_str());
191
+ value = eval.json_value.as_ref();
192
+ }
193
+
194
+ self.emit(SdkEvent::DynamicConfigEvaluated {
195
+ config_name,
196
+ reason,
197
+ rule_id,
198
+ value,
199
+ });
200
+ }
201
+
156
202
  pub(crate) fn emit_experiment_evaluated(&self, experiment: &Experiment) {
157
203
  self.emit(SdkEvent::ExperimentEvaluated {
158
204
  experiment_name: experiment.name.as_str(),
159
205
  reason: experiment.details.reason.as_str(),
160
206
  rule_id: Some(experiment.rule_id.as_str()),
161
207
  value: experiment.__evaluation.as_ref().map(|e| &e.value),
208
+ group_name: experiment.group_name.as_deref(),
209
+ });
210
+ }
211
+
212
+ #[cfg(feature = "ffi-support")]
213
+ pub(crate) fn emit_experiment_evaluated_parts(
214
+ &self,
215
+ experiment_name: &str,
216
+ reason: &str,
217
+ eval_result: Option<&crate::evaluation::evaluator_result::EvaluatorResult>,
218
+ ) {
219
+ let mut rule_id = None;
220
+ let mut value = None;
221
+ let mut group_name = None;
222
+
223
+ if let Some(eval) = eval_result {
224
+ rule_id = eval.rule_id.as_ref().map(|r| r.as_str());
225
+ value = eval.json_value.as_ref();
226
+ group_name = eval.group_name.as_ref().map(|g| g.as_str());
227
+ }
228
+
229
+ self.emit(SdkEvent::ExperimentEvaluated {
230
+ experiment_name,
231
+ reason,
232
+ rule_id,
233
+ value,
234
+ group_name,
162
235
  });
163
236
  }
164
237
 
@@ -169,4 +242,24 @@ impl Statsig {
169
242
  rule_id: Some(layer.rule_id.as_str()),
170
243
  });
171
244
  }
245
+
246
+ #[cfg(feature = "ffi-support")]
247
+ pub(crate) fn emit_layer_evaluated_parts(
248
+ &self,
249
+ layer_name: &str,
250
+ reason: &str,
251
+ eval_result: Option<&crate::evaluation::evaluator_result::EvaluatorResult>,
252
+ ) {
253
+ let mut rule_id = None;
254
+
255
+ if let Some(eval) = eval_result {
256
+ rule_id = eval.rule_id.as_ref().map(|r| r.as_str());
257
+ }
258
+
259
+ self.emit(SdkEvent::LayerEvaluated {
260
+ layer_name,
261
+ reason,
262
+ rule_id,
263
+ });
264
+ }
172
265
  }
@@ -59,6 +59,7 @@ pub enum SdkEvent<'a> {
59
59
  reason: &'a str,
60
60
  rule_id: Option<&'a str>,
61
61
  value: Option<&'a crate::DynamicReturnable>,
62
+ group_name: Option<&'a str>,
62
63
  },
63
64
  LayerEvaluated {
64
65
  layer_name: &'a str,
@@ -1129,6 +1129,41 @@ impl Statsig {
1129
1129
  self.spec_store
1130
1130
  .get_fields_used_for_entity(gate_name, SpecType::Gate)
1131
1131
  }
1132
+
1133
+ #[cfg(feature = "ffi-support")]
1134
+ pub fn get_raw_gate_with_options(
1135
+ &self,
1136
+ user: &StatsigUser,
1137
+ gate_name: &str,
1138
+ options: FeatureGateEvaluationOptions,
1139
+ ) -> String {
1140
+ use crate::evaluation::evaluator_result::result_to_gate_raw;
1141
+
1142
+ let interned_gate_name = InternedString::from_str_ref(gate_name);
1143
+ let user_internal = self.internalize_user(user);
1144
+
1145
+ let (details, evaluation) =
1146
+ self.evaluate_spec_raw(&user_internal, gate_name, &SpecType::Gate, None);
1147
+
1148
+ let raw = result_to_gate_raw(gate_name, &details, evaluation.as_ref());
1149
+
1150
+ self.emit_gate_evaluated_parts(gate_name, details.reason.as_str(), evaluation.as_ref());
1151
+
1152
+ if options.disable_exposure_logging {
1153
+ log_d!(TAG, "Exposure logging is disabled for gate {}", gate_name);
1154
+ self.event_logger.increment_non_exposure_checks(gate_name);
1155
+ } else {
1156
+ self.event_logger.enqueue(EnqueueExposureOp::gate_exposure(
1157
+ &user_internal,
1158
+ &interned_gate_name,
1159
+ ExposureTrigger::Auto,
1160
+ details,
1161
+ evaluation,
1162
+ ));
1163
+ }
1164
+
1165
+ raw
1166
+ }
1132
1167
  }
1133
1168
 
1134
1169
  // ------------------------------------------------------------------------------- [ Dynamic Config ]
@@ -1211,6 +1246,56 @@ impl Statsig {
1211
1246
  self.spec_store
1212
1247
  .get_fields_used_for_entity(config_name, SpecType::DynamicConfig)
1213
1248
  }
1249
+
1250
+ #[cfg(feature = "ffi-support")]
1251
+ pub fn get_raw_dynamic_config_with_options(
1252
+ &self,
1253
+ user: &StatsigUser,
1254
+ dynamic_config_name: &str,
1255
+ options: DynamicConfigEvaluationOptions,
1256
+ ) -> String {
1257
+ use crate::evaluation::evaluator_result::result_to_dynamic_config_raw;
1258
+
1259
+ let interned_dynamic_config_name = InternedString::from_str_ref(dynamic_config_name);
1260
+ let user_internal = self.internalize_user(user);
1261
+ let disable_exposure_logging: bool = options.disable_exposure_logging;
1262
+
1263
+ let (details, evaluation) = self.evaluate_spec_raw(
1264
+ &user_internal,
1265
+ dynamic_config_name,
1266
+ &SpecType::DynamicConfig,
1267
+ Some(disable_exposure_logging),
1268
+ );
1269
+
1270
+ let raw = result_to_dynamic_config_raw(dynamic_config_name, &details, evaluation.as_ref());
1271
+
1272
+ self.emit_dynamic_config_evaluated_parts(
1273
+ dynamic_config_name,
1274
+ details.reason.as_str(),
1275
+ evaluation.as_ref(),
1276
+ );
1277
+
1278
+ if disable_exposure_logging {
1279
+ log_d!(
1280
+ TAG,
1281
+ "Exposure logging is disabled for Dynamic Config {}",
1282
+ dynamic_config_name
1283
+ );
1284
+ self.event_logger
1285
+ .increment_non_exposure_checks(dynamic_config_name);
1286
+ } else {
1287
+ self.event_logger
1288
+ .enqueue(EnqueueExposureOp::dynamic_config_exposure(
1289
+ &user_internal,
1290
+ &interned_dynamic_config_name,
1291
+ ExposureTrigger::Auto,
1292
+ details,
1293
+ evaluation,
1294
+ ));
1295
+ }
1296
+
1297
+ raw
1298
+ }
1214
1299
  }
1215
1300
 
1216
1301
  // ------------------------------------------------------------------------------- [ Experiment ]
@@ -1354,6 +1439,56 @@ impl Statsig {
1354
1439
  EvaluationDetails::unrecognized(&data.source, data.values.time, data.time_received_at),
1355
1440
  )
1356
1441
  }
1442
+
1443
+ #[cfg(feature = "ffi-support")]
1444
+ pub fn get_raw_experiment_with_options(
1445
+ &self,
1446
+ user: &StatsigUser,
1447
+ experiment_name: &str,
1448
+ options: ExperimentEvaluationOptions,
1449
+ ) -> String {
1450
+ use crate::evaluation::evaluator_result::result_to_experiment_raw;
1451
+
1452
+ let interned_experiment_name = InternedString::from_str_ref(experiment_name);
1453
+ let user_internal = self.internalize_user(user);
1454
+ let disable_exposure_logging: bool = options.disable_exposure_logging;
1455
+
1456
+ let (details, evaluation) = self.evaluate_spec_raw(
1457
+ &user_internal,
1458
+ experiment_name,
1459
+ &SpecType::Experiment,
1460
+ Some(disable_exposure_logging),
1461
+ );
1462
+
1463
+ let raw = result_to_experiment_raw(experiment_name, &details, evaluation.as_ref());
1464
+
1465
+ self.emit_experiment_evaluated_parts(
1466
+ experiment_name,
1467
+ details.reason.as_str(),
1468
+ evaluation.as_ref(),
1469
+ );
1470
+
1471
+ if disable_exposure_logging {
1472
+ log_d!(
1473
+ TAG,
1474
+ "Exposure logging is disabled for Experiment {}",
1475
+ experiment_name
1476
+ );
1477
+ self.event_logger
1478
+ .increment_non_exposure_checks(experiment_name);
1479
+ } else {
1480
+ self.event_logger
1481
+ .enqueue(EnqueueExposureOp::dynamic_config_exposure(
1482
+ &user_internal,
1483
+ &interned_experiment_name,
1484
+ ExposureTrigger::Auto,
1485
+ details,
1486
+ evaluation,
1487
+ ));
1488
+ }
1489
+
1490
+ raw
1491
+ }
1357
1492
  }
1358
1493
 
1359
1494
  // ------------------------------------------------------------------------------- [ Layer ]
@@ -1400,6 +1535,37 @@ impl Statsig {
1400
1535
  self.spec_store
1401
1536
  .get_fields_used_for_entity(layer_name, SpecType::Layer)
1402
1537
  }
1538
+
1539
+ #[cfg(feature = "ffi-support")]
1540
+ pub fn get_raw_layer_with_options(
1541
+ &self,
1542
+ user: &StatsigUser,
1543
+ layer_name: &str,
1544
+ options: LayerEvaluationOptions,
1545
+ ) -> String {
1546
+ use crate::evaluation::evaluator_result::result_to_layer_raw;
1547
+
1548
+ let user_internal = self.internalize_user(user);
1549
+ let disable_exposure_logging: bool = options.disable_exposure_logging;
1550
+
1551
+ let (details, evaluation) = self.evaluate_spec_raw(
1552
+ &user_internal,
1553
+ layer_name,
1554
+ &SpecType::Experiment,
1555
+ Some(disable_exposure_logging),
1556
+ );
1557
+
1558
+ let raw = result_to_layer_raw(layer_name, &details, evaluation.as_ref());
1559
+
1560
+ self.emit_layer_evaluated_parts(layer_name, details.reason.as_str(), evaluation.as_ref());
1561
+
1562
+ if disable_exposure_logging {
1563
+ log_d!(TAG, "Exposure logging is disabled for Layer {}", layer_name);
1564
+ self.event_logger.increment_non_exposure_checks(layer_name);
1565
+ }
1566
+
1567
+ raw
1568
+ }
1403
1569
  }
1404
1570
 
1405
1571
  // ------------------------------------------------------------------------------- [ Internal ]
@@ -49,7 +49,7 @@ pub struct StatsigMetadataWithLogEventExtras {
49
49
  impl StatsigMetadata {
50
50
  fn new() -> Self {
51
51
  Self {
52
- sdk_version: "0.13.0".to_string(),
52
+ sdk_version: "0.13.1-beta.2512030239".to_string(),
53
53
  sdk_type: "statsig-server-core".to_string(),
54
54
  session_id: Uuid::new_v4().to_string(),
55
55
  os: None,
@@ -0,0 +1,125 @@
1
+ use serde::Serialize;
2
+
3
+ use crate::evaluation::dynamic_returnable::DynamicReturnable;
4
+ use crate::evaluation::evaluation_details::EvaluationDetails;
5
+ use crate::interned_string::InternedString;
6
+
7
+ #[derive(Serialize)]
8
+ #[serde(rename_all = "camelCase")]
9
+ pub(crate) struct FeatureGateRaw<'a> {
10
+ pub name: &'a str,
11
+
12
+ pub value: bool,
13
+
14
+ #[serde(rename = "ruleID")]
15
+ pub rule_id: Option<&'a InternedString>,
16
+
17
+ pub id_type: Option<&'a InternedString>,
18
+
19
+ pub details: &'a EvaluationDetails,
20
+ }
21
+
22
+ impl<'a> FeatureGateRaw<'a> {
23
+ pub fn empty(name: &'a str, details: &'a EvaluationDetails) -> Self {
24
+ Self {
25
+ name,
26
+ value: false,
27
+ details,
28
+ rule_id: None,
29
+ id_type: None,
30
+ }
31
+ }
32
+ }
33
+
34
+ #[derive(Serialize)]
35
+ #[serde(rename_all = "camelCase")]
36
+ pub(crate) struct DynamicConfigRaw<'a> {
37
+ pub name: &'a str,
38
+
39
+ pub value: Option<&'a DynamicReturnable>,
40
+
41
+ #[serde(rename = "ruleID")]
42
+ pub rule_id: Option<&'a InternedString>,
43
+
44
+ pub id_type: Option<&'a InternedString>,
45
+
46
+ pub details: &'a EvaluationDetails,
47
+ }
48
+
49
+ impl<'a> DynamicConfigRaw<'a> {
50
+ pub fn empty(name: &'a str, details: &'a EvaluationDetails) -> Self {
51
+ Self {
52
+ name,
53
+ value: None,
54
+ details,
55
+ rule_id: None,
56
+ id_type: None,
57
+ }
58
+ }
59
+ }
60
+
61
+ #[derive(Serialize)]
62
+ #[serde(rename_all = "camelCase")]
63
+ pub(crate) struct ExperimentRaw<'a> {
64
+ pub name: &'a str,
65
+
66
+ pub value: Option<&'a DynamicReturnable>,
67
+
68
+ #[serde(rename = "ruleID")]
69
+ pub rule_id: Option<&'a InternedString>,
70
+
71
+ pub id_type: Option<&'a InternedString>,
72
+
73
+ pub group_name: Option<&'a InternedString>,
74
+
75
+ pub is_experiment_active: Option<bool>,
76
+
77
+ pub details: &'a EvaluationDetails,
78
+ }
79
+
80
+ impl<'a> ExperimentRaw<'a> {
81
+ pub fn empty(name: &'a str, details: &'a EvaluationDetails) -> Self {
82
+ Self {
83
+ name,
84
+ value: None,
85
+ details,
86
+ rule_id: None,
87
+ id_type: None,
88
+ group_name: None,
89
+ is_experiment_active: None,
90
+ }
91
+ }
92
+ }
93
+
94
+ #[derive(Serialize)]
95
+ #[serde(rename_all = "camelCase")]
96
+ pub(crate) struct LayerRaw<'a> {
97
+ pub name: &'a str,
98
+
99
+ #[serde(rename = "ruleID")]
100
+ pub rule_id: Option<&'a InternedString>,
101
+
102
+ pub id_type: Option<&'a InternedString>,
103
+
104
+ pub group_name: Option<&'a InternedString>,
105
+
106
+ pub is_experiment_active: Option<bool>,
107
+
108
+ pub allocated_experiment_name: Option<&'a InternedString>,
109
+
110
+ pub details: &'a EvaluationDetails,
111
+ }
112
+
113
+ impl<'a> LayerRaw<'a> {
114
+ pub fn empty(name: &'a str, details: &'a EvaluationDetails) -> Self {
115
+ Self {
116
+ name,
117
+ details,
118
+ rule_id: None,
119
+ id_type: None,
120
+ group_name: None,
121
+ is_experiment_active: None,
122
+ allocated_experiment_name: None,
123
+ }
124
+ }
125
+ }
@@ -53,6 +53,7 @@ fn setup(sdk_key: &str) -> (Statsig, StatsigUser, mpsc::Receiver<ReceivedEvent>)
53
53
  reason,
54
54
  rule_id: _,
55
55
  value: _,
56
+ group_name: _,
56
57
  } => {
57
58
  result.data =
58
59
  EventData::Evaluation(experiment_name.to_string(), reason.to_string());