[INFO] fetching crate devcycle-bucketing-rs 0.2.3...
[INFO] testing devcycle-bucketing-rs-0.2.3 against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate devcycle-bucketing-rs 0.2.3 into /workspace/builds/worker-2-tc2/source
[INFO] removed /workspace/builds/worker-2-tc2/source/rust-toolchain.toml
[INFO] started tweaking crates.io crate devcycle-bucketing-rs 0.2.3
[INFO] finished tweaking crates.io crate devcycle-bucketing-rs 0.2.3
[INFO] tweaked toml for crates.io crate devcycle-bucketing-rs 0.2.3 written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate devcycle-bucketing-rs 0.2.3 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate devcycle-bucketing-rs 0.2.3 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4
[INFO] running `Command { std: "docker" "start" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling libc v0.2.177
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling unicode-ident v1.0.22
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling pin-project-lite v0.2.16
[INFO] [stderr]    Compiling ryu v1.0.20
[INFO] [stderr]    Compiling iana-time-zone v0.1.64
[INFO] [stderr]    Compiling itoa v1.0.15
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling bytes v1.11.0
[INFO] [stderr]    Compiling syn v2.0.110
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling mio v1.1.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling hostname v0.4.1
[INFO] [stderr]    Compiling murmur3 v0.5.2
[INFO] [stderr]    Compiling semver v1.0.27
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling devcycle-bucketing-rs v0.2.3 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unexpected `cfg` condition value: `protobuf`
[INFO] [stdout]   --> src/lib.rs:61:7
[INFO] [stdout]    |
[INFO] [stdout] 61 | #[cfg(feature = "protobuf")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `console_error_panic_hook`, `default`, `libc`, `serde-wasm-bindgen`, `wasm`, `wasm-bindgen`, and `wasm-bindgen-futures`
[INFO] [stdout]    = help: consider adding `protobuf` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bucketing::*`
[INFO] [stdout]   --> src/bucketing/mod.rs:10:16
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub(crate) use bucketing::*;
[INFO] [stdout]    |                ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event::*`
[INFO] [stdout]   --> src/events/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use event::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `filters::*`
[INFO] [stdout]  --> src/segmentation/mod.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub(crate) use filters::*;
[INFO] [stdout]   |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::DevCycleError`
[INFO] [stdout]  --> src/util/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use errors::DevCycleError;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |             return f64::NAN;
[INFO] [stdout]    |                         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:44:56
[INFO] [stdout]    |
[INFO] [stdout] 44 |                     Err(_) => v1_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |                     Err(_) => v2_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:193:51
[INFO] [stdout]     |
[INFO] [stdout] 193 |                     constants::COMPARATOR_EQUAL | "=" => {
[INFO] [stdout]     |                     ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:199:61
[INFO] [stdout]     |
[INFO] [stdout] 199 | ...                   constants::COMPARATOR_GREATER | ">" => result > 0.0,
[INFO] [stdout]     |                       -----------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:200:67
[INFO] [stdout]     |
[INFO] [stdout] 200 | ...                   constants::COMPARATOR_GREATER_EQUAL | ">=" => result >= 0.0,
[INFO] [stdout]     |                       -----------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:201:58
[INFO] [stdout]     |
[INFO] [stdout] 201 | ...                   constants::COMPARATOR_LESS | "<" => result < 0.0,
[INFO] [stdout]     |                       --------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:202:64
[INFO] [stdout]     |
[INFO] [stdout] 202 | ...                   constants::COMPARATOR_LESS_EQUAL | "<=" => result <= 0.0,
[INFO] [stdout]     |                       --------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:287:47
[INFO] [stdout]     |
[INFO] [stdout] 287 |                 constants::COMPARATOR_EQUAL | "=" => user_value == filter_value,
[INFO] [stdout]     |                 ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:214:11
[INFO] [stdout]     |
[INFO] [stdout] 214 |     match CStr::from_ptr(sdk_key).to_str() {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:206:1
[INFO] [stdout]     |
[INFO] [stdout] 206 | unsafe fn parse_sdk_key(sdk_key: *const c_char) -> Result<String, DevCycleFFIErrorCode> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:236:29
[INFO] [stdout]     |
[INFO] [stdout] 236 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:230:1
[INFO] [stdout]     |
[INFO] [stdout] 230 | / pub unsafe extern "C" fn devcycle_init_event_queue(
[INFO] [stdout] 231 | |     sdk_key: *const c_char,
[INFO] [stdout] 232 | |     options: *const CEventQueueOptions,
[INFO] [stdout] 233 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:244:9
[INFO] [stdout]     |
[INFO] [stdout] 244 |         (*options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:293:29
[INFO] [stdout]     |
[INFO] [stdout] 293 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:278:1
[INFO] [stdout]     |
[INFO] [stdout] 278 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config(
[INFO] [stdout] 279 | |     sdk_key: *const c_char,
[INFO] [stdout] 280 | |     user: *const CPopulatedUser,
[INFO] [stdout] 281 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 282 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:298:26
[INFO] [stdout]     |
[INFO] [stdout] 298 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:304:19
[INFO] [stdout]     |
[INFO] [stdout] 304 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:371:29
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:356:1
[INFO] [stdout]     |
[INFO] [stdout] 356 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config_from_user(
[INFO] [stdout] 357 | |     sdk_key: *const c_char,
[INFO] [stdout] 358 | |     user: *const CUser,
[INFO] [stdout] 359 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 360 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:376:20
[INFO] [stdout]     |
[INFO] [stdout] 376 |     let user_obj = (*user).0.clone();
[INFO] [stdout]     |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:424:29
[INFO] [stdout]     |
[INFO] [stdout] 424 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:410:1
[INFO] [stdout]     |
[INFO] [stdout] 410 | / pub unsafe extern "C" fn devcycle_set_config(
[INFO] [stdout] 411 | |     sdk_key: *const c_char,
[INFO] [stdout] 412 | |     config_json: *const c_char,
[INFO] [stdout] 413 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:429:33
[INFO] [stdout]     |
[INFO] [stdout] 429 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:508:29
[INFO] [stdout]     |
[INFO] [stdout] 508 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:494:1
[INFO] [stdout]     |
[INFO] [stdout] 494 | / pub unsafe extern "C" fn devcycle_set_client_custom_data(
[INFO] [stdout] 495 | |     sdk_key: *const c_char,
[INFO] [stdout] 496 | |     custom_data_json: *const c_char,
[INFO] [stdout] 497 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:513:38
[INFO] [stdout]     |
[INFO] [stdout] 513 |     let custom_data_json_str = match CStr::from_ptr(custom_data_json).to_str() {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:572:29
[INFO] [stdout]     |
[INFO] [stdout] 572 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:566:1
[INFO] [stdout]     |
[INFO] [stdout] 566 | / pub unsafe extern "C" fn devcycle_set_platform_data(
[INFO] [stdout] 567 | |     sdk_key: *const c_char,
[INFO] [stdout] 568 | |     platform_data_json: *const c_char,
[INFO] [stdout] 569 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:585:40
[INFO] [stdout]     |
[INFO] [stdout] 585 |     let platform_data_json_str = match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:645:29
[INFO] [stdout]     |
[INFO] [stdout] 645 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:628:1
[INFO] [stdout]     |
[INFO] [stdout] 628 | / pub unsafe extern "C" fn devcycle_init_sdk_key(
[INFO] [stdout] 629 | |     sdk_key: *const c_char,
[INFO] [stdout] 630 | |     config_json: *const c_char,
[INFO] [stdout] 631 | |     event_queue_options: *const CEventQueueOptions,
[INFO] [stdout] 632 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 633 | |     platform_data_json: *const c_char,
[INFO] [stdout] 634 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:650:33
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:665:15
[INFO] [stdout]     |
[INFO] [stdout] 665 |         match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:714:9
[INFO] [stdout]     |
[INFO] [stdout] 714 |         (*event_queue_options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:722:19
[INFO] [stdout]     |
[INFO] [stdout] 722 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:793:29
[INFO] [stdout]     |
[INFO] [stdout] 793 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:779:1
[INFO] [stdout]     |
[INFO] [stdout] 779 | / pub unsafe extern "C" fn devcycle_variable_for_user(
[INFO] [stdout] 780 | |     sdk_key: *const c_char,
[INFO] [stdout] 781 | |     user: *const CPopulatedUser,
[INFO] [stdout] 782 | |     variable_key: *const c_char,
[INFO] [stdout] 783 | |     variable_type: *const c_char,
[INFO] [stdout] 784 | | ) -> *mut CVariableForUserResult {
[INFO] [stdout]     | |________________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:797:34
[INFO] [stdout]     |
[INFO] [stdout] 797 |     let variable_key_str = match CStr::from_ptr(variable_key).to_str() {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:807:35
[INFO] [stdout]     |
[INFO] [stdout] 807 |     let variable_type_str = match CStr::from_ptr(variable_type).to_str() {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:817:26
[INFO] [stdout]     |
[INFO] [stdout] 817 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:859:34
[INFO] [stdout]     |
[INFO] [stdout] 859 |     match serde_json::to_string(&(*result).0.variable_value) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:848:1
[INFO] [stdout]     |
[INFO] [stdout] 848 | / pub unsafe extern "C" fn devcycle_variable_result_to_json(
[INFO] [stdout] 849 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 850 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:897:24
[INFO] [stdout]     |
[INFO] [stdout] 897 |     match CString::new((*result).0.variable_type.clone()) {
[INFO] [stdout]     |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:886:1
[INFO] [stdout]     |
[INFO] [stdout] 886 | / pub unsafe extern "C" fn devcycle_variable_result_get_type(
[INFO] [stdout] 887 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 888 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:926:34
[INFO] [stdout]     |
[INFO] [stdout] 926 |     match serde_json::to_string(&(*config).0) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:915:1
[INFO] [stdout]     |
[INFO] [stdout] 915 | / pub unsafe extern "C" fn devcycle_bucketed_config_to_json(
[INFO] [stdout] 916 | |     config: *const CBucketedUserConfig,
[INFO] [stdout] 917 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:954:17
[INFO] [stdout]     |
[INFO] [stdout] 954 |         let _ = Box::from_raw(result);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:952:1
[INFO] [stdout]     |
[INFO] [stdout] 952 | pub unsafe extern "C" fn devcycle_free_variable_result(result: *mut CVariableForUserResult) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CString::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:962:17
[INFO] [stdout]     |
[INFO] [stdout] 962 |         let _ = CString::from_raw(s);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:960:1
[INFO] [stdout]     |
[INFO] [stdout] 960 | pub unsafe extern "C" fn devcycle_free_string(s: *mut c_char) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:970:17
[INFO] [stdout]     |
[INFO] [stdout] 970 |         let _ = Box::from_raw(config);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:968:1
[INFO] [stdout]     |
[INFO] [stdout] 968 | pub unsafe extern "C" fn devcycle_free_bucketed_config(config: *mut CBucketedUserConfig) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:978:17
[INFO] [stdout]     |
[INFO] [stdout] 978 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:976:1
[INFO] [stdout]     |
[INFO] [stdout] 976 | pub unsafe extern "C" fn devcycle_free_user(user: *mut CUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:986:17
[INFO] [stdout]     |
[INFO] [stdout] 986 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:984:1
[INFO] [stdout]     |
[INFO] [stdout] 984 | pub unsafe extern "C" fn devcycle_free_populated_user(user: *mut CPopulatedUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:994:17
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let _ = Box::from_raw(options);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:992:1
[INFO] [stdout]     |
[INFO] [stdout] 992 | pub unsafe extern "C" fn devcycle_free_event_queue_options(options: *mut CEventQueueOptions) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1009:26
[INFO] [stdout]      |
[INFO] [stdout] 1009 |     let json_str = match CStr::from_ptr(json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1000:1
[INFO] [stdout]      |
[INFO] [stdout] 1000 | pub unsafe extern "C" fn devcycle_user_from_json(json: *const c_char) -> *mut CUser {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1051:29
[INFO] [stdout]      |
[INFO] [stdout] 1051 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1039:1
[INFO] [stdout]      |
[INFO] [stdout] 1039 | / pub unsafe extern "C" fn devcycle_populate_user(
[INFO] [stdout] 1040 | |     sdk_key: *const c_char,
[INFO] [stdout] 1041 | |     user: *const CUser,
[INFO] [stdout] 1042 | | ) -> *mut CPopulatedUser {
[INFO] [stdout]      | |________________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1055:20
[INFO] [stdout]      |
[INFO] [stdout] 1055 |     let user_obj = (*user).0.clone();
[INFO] [stdout]      |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1076:26
[INFO] [stdout]      |
[INFO] [stdout] 1076 |     let json_str = match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1064:1
[INFO] [stdout]      |
[INFO] [stdout] 1064 | / pub unsafe extern "C" fn devcycle_populated_user_merge_client_custom_data(
[INFO] [stdout] 1065 | |     populated_user: *mut CPopulatedUser,
[INFO] [stdout] 1066 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 1067 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1099:20
[INFO] [stdout]      |
[INFO] [stdout] 1099 |     let pop = &mut (*populated_user).0;
[INFO] [stdout]      |                    ^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1123:24
[INFO] [stdout]      |
[INFO] [stdout] 1123 |     match CString::new((*result).0.feature_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1112:1
[INFO] [stdout]      |
[INFO] [stdout] 1112 | / pub unsafe extern "C" fn devcycle_variable_result_get_feature_id(
[INFO] [stdout] 1113 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1114 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1152:24
[INFO] [stdout]      |
[INFO] [stdout] 1152 |     match CString::new((*result).0.variation_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1141:1
[INFO] [stdout]      |
[INFO] [stdout] 1141 | / pub unsafe extern "C" fn devcycle_variable_result_get_variation_id(
[INFO] [stdout] 1142 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1143 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1181:29
[INFO] [stdout]      |
[INFO] [stdout] 1181 |     let reason_str = match &(*result).0.eval_reason {
[INFO] [stdout]      |                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1170:1
[INFO] [stdout]      |
[INFO] [stdout] 1170 | / pub unsafe extern "C" fn devcycle_variable_result_get_evaluation_reason(
[INFO] [stdout] 1171 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1172 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1212:12
[INFO] [stdout]      |
[INFO] [stdout] 1212 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1202:1
[INFO] [stdout]      |
[INFO] [stdout] 1202 | / pub unsafe extern "C" fn devcycle_variable_result_is_error(
[INFO] [stdout] 1203 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1204 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1238:12
[INFO] [stdout]      |
[INFO] [stdout] 1238 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1227:1
[INFO] [stdout]      |
[INFO] [stdout] 1227 | / pub unsafe extern "C" fn devcycle_variable_result_get_error(
[INFO] [stdout] 1228 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1229 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1273:61
[INFO] [stdout]      |
[INFO] [stdout] 1273 |     let (is_error, eval_reason_str, error_message) = match &(*result).0.eval_reason {
[INFO] [stdout]      |                                                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1262:1
[INFO] [stdout]      |
[INFO] [stdout] 1262 | / pub unsafe extern "C" fn devcycle_variable_result_to_full_json(
[INFO] [stdout] 1263 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1264 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1278:25
[INFO] [stdout]      |
[INFO] [stdout] 1278 |         "variableType": (*result).0.variable_type,
[INFO] [stdout]      |                         ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1279:26
[INFO] [stdout]      |
[INFO] [stdout] 1279 |         "variableValue": (*result).0.variable_value,
[INFO] [stdout]      |                          ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1280:22
[INFO] [stdout]      |
[INFO] [stdout] 1280 |         "featureId": (*result).0.feature_id,
[INFO] [stdout]      |                      ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1281:24
[INFO] [stdout]      |
[INFO] [stdout] 1281 |         "variationId": (*result).0.variation_id,
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1347:29
[INFO] [stdout]      |
[INFO] [stdout] 1347 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1329:1
[INFO] [stdout]      |
[INFO] [stdout] 1329 | / pub unsafe extern "C" fn devcycle_queue_event(
[INFO] [stdout] 1330 | |     sdk_key: *const c_char,
[INFO] [stdout] 1331 | |     user_json: *const c_char,
[INFO] [stdout] 1332 | |     event_type_str: *const c_char,
[INFO] [stdout] ...    |
[INFO] [stdout] 1336 | |     meta_data_json: *const c_char,
[INFO] [stdout] 1337 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1351:31
[INFO] [stdout]      |
[INFO] [stdout] 1351 |     let user_json_str = match CStr::from_ptr(user_json).to_str() {
[INFO] [stdout]      |                               ^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1361:32
[INFO] [stdout]      |
[INFO] [stdout] 1361 |     let event_type_raw = match CStr::from_ptr(event_type_str).to_str() {
[INFO] [stdout]      |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1387:15
[INFO] [stdout]      |
[INFO] [stdout] 1387 |         match CStr::from_ptr(custom_type).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1402:15
[INFO] [stdout]      |
[INFO] [stdout] 1402 |         match CStr::from_ptr(target).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1418:15
[INFO] [stdout]      |
[INFO] [stdout] 1418 |         match CStr::from_ptr(meta_data_json).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BucketingConfiguration` is never constructed
[INFO] [stdout]   --> src/config/config.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub(crate) struct BucketingConfiguration {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SSEHost` is never constructed
[INFO] [stdout]   --> src/config/config.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct SSEHost {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_feature_for_key` is never used
[INFO] [stdout]    --> src/config/config.rs:179:19
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl ConfigBody {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub(crate) fn get_feature_for_key(&self, key: &str) -> Option<&ConfigFeature> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_config` is never used
[INFO] [stdout]   --> src/config/configmanager.rs:19:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) fn has_config(sdk_key: &str) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `target`, `custom_type`, `client_date`, `value`, and `meta_data` are never read
[INFO] [stdout]    --> src/events/event.rs:109:16
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub(crate) struct Event {
[INFO] [stdout]     |                   ----- fields in this struct
[INFO] [stdout] 108 |     pub(crate) event_type: EventType,
[INFO] [stdout] 109 |     pub(crate) target: String,
[INFO] [stdout]     |                ^^^^^^
[INFO] [stdout] 110 |     pub(crate) custom_type: String,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 111 |     pub(crate) user_id: String,
[INFO] [stdout] 112 |     pub(crate) client_date: std::time::Instant,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 113 |     pub(crate) value: f64,
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] 114 |     pub(crate) feature_vars: HashMap<String, String>,
[INFO] [stdout] 115 |     pub(crate) meta_data: HashMap<String, serde_json::Value>,
[INFO] [stdout]     |                ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event` and `user` are never read
[INFO] [stdout]    --> src/events/event.rs:119:16
[INFO] [stdout]     |
[INFO] [stdout] 118 | pub(crate) struct UserEventData {
[INFO] [stdout]     |                   ------------- fields in this struct
[INFO] [stdout] 119 |     pub(crate) event: Event,
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] 120 |     pub(crate) user: User,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `user` is never read
[INFO] [stdout]    --> src/events/event.rs:124:16
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub(crate) struct UserEventsBatchRecord {
[INFO] [stdout]     |                   --------------------- field in this struct
[INFO] [stdout] 124 |     pub(crate) user: PopulatedUser,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_type`, `variable_key`, `feature_id`, `variation_id`, and `eval_metadata` are never read
[INFO] [stdout]    --> src/events/event.rs:129:16
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub(crate) struct AggEventQueueRawMessage {
[INFO] [stdout]     |                   ----------------------- fields in this struct
[INFO] [stdout] 129 |     pub(crate) event_type: EventType,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 130 |     pub(crate) variable_key: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 131 |     pub(crate) feature_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 132 |     pub(crate) variation_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 133 |     pub(crate) eval_metadata: EvalReasonAggMap,
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/events/event_queue.rs:51:16
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct EventQueue {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 51 |     pub(crate) sdk_key: String,
[INFO] [stdout]    |                ^^^^^^^
[INFO] [stdout] 52 |     pub(crate) platform_data: Arc<PlatformData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^
[INFO] [stdout] 53 |     pub(crate) agg_event_queue_raw_tx: mpsc::Sender<AggEventQueueRawMessage>,
[INFO] [stdout] 54 |     pub(crate) agg_event_queue_raw_rx: mpsc::Receiver<AggEventQueueRawMessage>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     pub(crate) user_event_queue_raw_tx: mpsc::Sender<UserEventData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 56 |     pub(crate) user_event_queue_raw_rx: mpsc::Receiver<UserEventData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 57 |     pub(crate) agg_event_queue: AggregateEventQueue,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub(crate) queue_access_mutex: tokio::sync::Mutex<()>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     pub(crate) events_flushed: AtomicI64,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^
[INFO] [stdout] 62 |     pub(crate) events_dropped: AtomicI64,
[INFO] [stdout] 63 |     pub(crate) events_reported: AtomicI64,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `queue_event`, `merge_agg_event_queue_keys`, `process_user_events`, `process_aggregate_event`, and `process_events` are never used
[INFO] [stdout]    --> src/events/event_queue.rs:172:18
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl EventQueue {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn queue_event(&self, user: User, event: Event) -> Result<bool, DevCycleError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub(crate) async fn merge_agg_event_queue_keys(&mut self, config_body: &ConfigBody) {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     async unsafe fn process_user_events(
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub(crate) async fn process_aggregate_event(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub(crate) async fn process_events(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_event_queue` is never used
[INFO] [stdout]   --> src/events/event_queue_manager.rs:19:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) fn has_event_queue(sdk_key: &str) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum FilterType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterSubType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum FilterSubType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterOrOperator` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:446:11
[INFO] [stdout]     |
[INFO] [stdout] 446 | pub trait FilterOrOperator {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PassFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:524:12
[INFO] [stdout]     |
[INFO] [stdout] 524 | pub struct PassFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl PassFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 526 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FailFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:535:12
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub struct FailFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:537:12
[INFO] [stdout]     |
[INFO] [stdout] 536 | impl FailFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 537 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `AllFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:546:10
[INFO] [stdout]     |
[INFO] [stdout] 546 | pub type AllFilter = PassFilter;
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `OptInFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:547:10
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub type OptInFilter = FailFilter;
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BaseFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:550:12
[INFO] [stdout]     |
[INFO] [stdout] 550 | pub struct BaseFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:557:12
[INFO] [stdout]     |
[INFO] [stdout] 557 | pub struct UserFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `evaluate` and `compile` are never used
[INFO] [stdout]    --> src/segmentation/filters.rs:566:12
[INFO] [stdout]     |
[INFO] [stdout] 565 | impl UserFilter {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 566 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     pub fn compile(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterTrait` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:647:7
[INFO] [stdout]     |
[INFO] [stdout] 647 | trait FilterTrait {
[INFO] [stdout]     |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Audience` is never constructed
[INFO] [stdout]   --> src/segmentation/target.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Audience {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SemverOptions` is never constructed
[INFO] [stdout]  --> src/segmentation/versioncompare.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | struct SemverOptions {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Compare` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | trait Compare {
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_valid_parts` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:75:4
[INFO] [stdout]    |
[INFO] [stdout] 75 | fn has_valid_parts(lexicographical: bool, parts: &[String]) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `user` and `feature_vars` are never read
[INFO] [stdout]   --> src/user/user.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct UserFeatureData<'a> {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 70 |     user: &'a User,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 71 |     feature_vars: &'a HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `user` is never read
[INFO] [stdout]    --> src/user/user.rs:177:16
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub struct BucketedUserConfig {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub(crate) user: PopulatedUser,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const VARIABLE_EVALUATED_EVENT: &str = "variableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const VARIABLE_DEFAULTED_EVENT: &str = "variableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const AGG_VARIABLE_EVALUATED_EVENT: &str = "aggVariableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const AGG_VARIABLE_DEFAULTED_EVENT: &str = "aggVariableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUB_TYPE_IP` is never used
[INFO] [stdout]   --> src/util/constants.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const SUB_TYPE_IP: &str = "ip";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_STRING` is never used
[INFO] [stdout]   --> src/util/constants.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const DATA_KEY_TYPE_STRING: &str = "String";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_BOOLEAN` is never used
[INFO] [stdout]   --> src/util/constants.rs:40:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub const DATA_KEY_TYPE_BOOLEAN: &str = "Boolean";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_NUMBER` is never used
[INFO] [stdout]   --> src/util/constants.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub const DATA_KEY_TYPE_NUMBER: &str = "Number";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ROLLOUT_TYPE_PERCENTAGE` is never used
[INFO] [stdout]   --> src/util/constants.rs:49:11
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub const ROLLOUT_TYPE_PERCENTAGE: &str = "percentage";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIABLE` is never used
[INFO] [stdout]   --> src/util/errors.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const MISSING_VARIABLE: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIATION` is never used
[INFO] [stdout]   --> src/util/errors.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub const MISSING_VARIATION: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_targets` is never used
[INFO] [stdout]   --> src/util/errors.rs:51:15
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub(crate) fn failed_user_does_not_qualify_for_targets() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_rollouts` is never used
[INFO] [stdout]   --> src/util/errors.rs:55:15
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub(crate) fn failed_user_does_not_qualify_for_rollouts() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `variable_type_mismatch` is never used
[INFO] [stdout]   --> src/util/errors.rs:83:15
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub(crate) fn variable_type_mismatch() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_to_set_client_custom_data` is never used
[INFO] [stdout]   --> src/util/errors.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn failed_to_set_client_custom_data() -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]   --> src/util/errors.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn parse_error(msg: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `missing_field` is never used
[INFO] [stdout]   --> src/util/errors.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn missing_field(field: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 26s
[INFO] running `Command { std: "docker" "inspect" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.110
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling futures-core v0.3.31
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling find-msvc-tools v0.1.5
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]    Compiling cc v1.2.46
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling pin-utils v0.1.0
[INFO] [stderr]    Compiling http v1.3.1
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling futures-task v0.3.31
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling icu_properties_data v2.1.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling tracing-core v0.1.34
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling zerocopy v0.8.27
[INFO] [stderr]    Compiling hashbrown v0.16.0
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling foreign-types-shared v0.1.1
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling foreign-types v0.3.2
[INFO] [stderr]    Compiling tracing v0.1.41
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling slab v0.4.11
[INFO] [stderr]    Compiling atomic-waker v1.1.2
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling indexmap v2.12.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling openssl-probe v0.1.6
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling tower-layer v0.3.3
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling clap_lex v0.7.6
[INFO] [stderr]    Compiling ipnet v2.11.0
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling clap_builder v4.5.52
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling iri-string v0.7.9
[INFO] [stderr]    Compiling rustls-pki-types v1.13.0
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling clap v4.5.52
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling zerocopy-derive v0.8.27
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.1
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]    Compiling tokio-util v0.7.17
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tower v0.5.2
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling h2 v0.4.12
[INFO] [stderr]    Compiling tower-http v0.6.6
[INFO] [stderr]    Compiling devcycle-bucketing-rs v0.2.3 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unexpected `cfg` condition value: `protobuf`
[INFO] [stdout]   --> src/lib.rs:61:7
[INFO] [stdout]    |
[INFO] [stdout] 61 | #[cfg(feature = "protobuf")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `console_error_panic_hook`, `default`, `libc`, `serde-wasm-bindgen`, `wasm`, `wasm-bindgen`, and `wasm-bindgen-futures`
[INFO] [stdout]    = help: consider adding `protobuf` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bucketing::*`
[INFO] [stdout]   --> src/bucketing/mod.rs:10:16
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub(crate) use bucketing::*;
[INFO] [stdout]    |                ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event::*`
[INFO] [stdout]   --> src/events/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use event::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `filters::*`
[INFO] [stdout]  --> src/segmentation/mod.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub(crate) use filters::*;
[INFO] [stdout]   |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::DevCycleError`
[INFO] [stdout]  --> src/util/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use errors::DevCycleError;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |             return f64::NAN;
[INFO] [stdout]    |                         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:44:56
[INFO] [stdout]    |
[INFO] [stdout] 44 |                     Err(_) => v1_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |                     Err(_) => v2_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:193:51
[INFO] [stdout]     |
[INFO] [stdout] 193 |                     constants::COMPARATOR_EQUAL | "=" => {
[INFO] [stdout]     |                     ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:199:61
[INFO] [stdout]     |
[INFO] [stdout] 199 | ...                   constants::COMPARATOR_GREATER | ">" => result > 0.0,
[INFO] [stdout]     |                       -----------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:200:67
[INFO] [stdout]     |
[INFO] [stdout] 200 | ...                   constants::COMPARATOR_GREATER_EQUAL | ">=" => result >= 0.0,
[INFO] [stdout]     |                       -----------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:201:58
[INFO] [stdout]     |
[INFO] [stdout] 201 | ...                   constants::COMPARATOR_LESS | "<" => result < 0.0,
[INFO] [stdout]     |                       --------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:202:64
[INFO] [stdout]     |
[INFO] [stdout] 202 | ...                   constants::COMPARATOR_LESS_EQUAL | "<=" => result <= 0.0,
[INFO] [stdout]     |                       --------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:287:47
[INFO] [stdout]     |
[INFO] [stdout] 287 |                 constants::COMPARATOR_EQUAL | "=" => user_value == filter_value,
[INFO] [stdout]     |                 ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:214:11
[INFO] [stdout]     |
[INFO] [stdout] 214 |     match CStr::from_ptr(sdk_key).to_str() {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:206:1
[INFO] [stdout]     |
[INFO] [stdout] 206 | unsafe fn parse_sdk_key(sdk_key: *const c_char) -> Result<String, DevCycleFFIErrorCode> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:236:29
[INFO] [stdout]     |
[INFO] [stdout] 236 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:230:1
[INFO] [stdout]     |
[INFO] [stdout] 230 | / pub unsafe extern "C" fn devcycle_init_event_queue(
[INFO] [stdout] 231 | |     sdk_key: *const c_char,
[INFO] [stdout] 232 | |     options: *const CEventQueueOptions,
[INFO] [stdout] 233 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:244:9
[INFO] [stdout]     |
[INFO] [stdout] 244 |         (*options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:293:29
[INFO] [stdout]     |
[INFO] [stdout] 293 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:278:1
[INFO] [stdout]     |
[INFO] [stdout] 278 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config(
[INFO] [stdout] 279 | |     sdk_key: *const c_char,
[INFO] [stdout] 280 | |     user: *const CPopulatedUser,
[INFO] [stdout] 281 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 282 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:298:26
[INFO] [stdout]     |
[INFO] [stdout] 298 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:304:19
[INFO] [stdout]     |
[INFO] [stdout] 304 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:371:29
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:356:1
[INFO] [stdout]     |
[INFO] [stdout] 356 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config_from_user(
[INFO] [stdout] 357 | |     sdk_key: *const c_char,
[INFO] [stdout] 358 | |     user: *const CUser,
[INFO] [stdout] 359 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 360 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:376:20
[INFO] [stdout]     |
[INFO] [stdout] 376 |     let user_obj = (*user).0.clone();
[INFO] [stdout]     |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:424:29
[INFO] [stdout]     |
[INFO] [stdout] 424 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:410:1
[INFO] [stdout]     |
[INFO] [stdout] 410 | / pub unsafe extern "C" fn devcycle_set_config(
[INFO] [stdout] 411 | |     sdk_key: *const c_char,
[INFO] [stdout] 412 | |     config_json: *const c_char,
[INFO] [stdout] 413 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:429:33
[INFO] [stdout]     |
[INFO] [stdout] 429 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:508:29
[INFO] [stdout]     |
[INFO] [stdout] 508 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:494:1
[INFO] [stdout]     |
[INFO] [stdout] 494 | / pub unsafe extern "C" fn devcycle_set_client_custom_data(
[INFO] [stdout] 495 | |     sdk_key: *const c_char,
[INFO] [stdout] 496 | |     custom_data_json: *const c_char,
[INFO] [stdout] 497 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:513:38
[INFO] [stdout]     |
[INFO] [stdout] 513 |     let custom_data_json_str = match CStr::from_ptr(custom_data_json).to_str() {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:572:29
[INFO] [stdout]     |
[INFO] [stdout] 572 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:566:1
[INFO] [stdout]     |
[INFO] [stdout] 566 | / pub unsafe extern "C" fn devcycle_set_platform_data(
[INFO] [stdout] 567 | |     sdk_key: *const c_char,
[INFO] [stdout] 568 | |     platform_data_json: *const c_char,
[INFO] [stdout] 569 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:585:40
[INFO] [stdout]     |
[INFO] [stdout] 585 |     let platform_data_json_str = match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:645:29
[INFO] [stdout]     |
[INFO] [stdout] 645 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:628:1
[INFO] [stdout]     |
[INFO] [stdout] 628 | / pub unsafe extern "C" fn devcycle_init_sdk_key(
[INFO] [stdout] 629 | |     sdk_key: *const c_char,
[INFO] [stdout] 630 | |     config_json: *const c_char,
[INFO] [stdout] 631 | |     event_queue_options: *const CEventQueueOptions,
[INFO] [stdout] 632 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 633 | |     platform_data_json: *const c_char,
[INFO] [stdout] 634 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:650:33
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:665:15
[INFO] [stdout]     |
[INFO] [stdout] 665 |         match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:714:9
[INFO] [stdout]     |
[INFO] [stdout] 714 |         (*event_queue_options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:722:19
[INFO] [stdout]     |
[INFO] [stdout] 722 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:793:29
[INFO] [stdout]     |
[INFO] [stdout] 793 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:779:1
[INFO] [stdout]     |
[INFO] [stdout] 779 | / pub unsafe extern "C" fn devcycle_variable_for_user(
[INFO] [stdout] 780 | |     sdk_key: *const c_char,
[INFO] [stdout] 781 | |     user: *const CPopulatedUser,
[INFO] [stdout] 782 | |     variable_key: *const c_char,
[INFO] [stdout] 783 | |     variable_type: *const c_char,
[INFO] [stdout] 784 | | ) -> *mut CVariableForUserResult {
[INFO] [stdout]     | |________________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:797:34
[INFO] [stdout]     |
[INFO] [stdout] 797 |     let variable_key_str = match CStr::from_ptr(variable_key).to_str() {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:807:35
[INFO] [stdout]     |
[INFO] [stdout] 807 |     let variable_type_str = match CStr::from_ptr(variable_type).to_str() {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:817:26
[INFO] [stdout]     |
[INFO] [stdout] 817 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:859:34
[INFO] [stdout]     |
[INFO] [stdout] 859 |     match serde_json::to_string(&(*result).0.variable_value) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:848:1
[INFO] [stdout]     |
[INFO] [stdout] 848 | / pub unsafe extern "C" fn devcycle_variable_result_to_json(
[INFO] [stdout] 849 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 850 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:897:24
[INFO] [stdout]     |
[INFO] [stdout] 897 |     match CString::new((*result).0.variable_type.clone()) {
[INFO] [stdout]     |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:886:1
[INFO] [stdout]     |
[INFO] [stdout] 886 | / pub unsafe extern "C" fn devcycle_variable_result_get_type(
[INFO] [stdout] 887 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 888 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:926:34
[INFO] [stdout]     |
[INFO] [stdout] 926 |     match serde_json::to_string(&(*config).0) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:915:1
[INFO] [stdout]     |
[INFO] [stdout] 915 | / pub unsafe extern "C" fn devcycle_bucketed_config_to_json(
[INFO] [stdout] 916 | |     config: *const CBucketedUserConfig,
[INFO] [stdout] 917 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:954:17
[INFO] [stdout]     |
[INFO] [stdout] 954 |         let _ = Box::from_raw(result);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:952:1
[INFO] [stdout]     |
[INFO] [stdout] 952 | pub unsafe extern "C" fn devcycle_free_variable_result(result: *mut CVariableForUserResult) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CString::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:962:17
[INFO] [stdout]     |
[INFO] [stdout] 962 |         let _ = CString::from_raw(s);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:960:1
[INFO] [stdout]     |
[INFO] [stdout] 960 | pub unsafe extern "C" fn devcycle_free_string(s: *mut c_char) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:970:17
[INFO] [stdout]     |
[INFO] [stdout] 970 |         let _ = Box::from_raw(config);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:968:1
[INFO] [stdout]     |
[INFO] [stdout] 968 | pub unsafe extern "C" fn devcycle_free_bucketed_config(config: *mut CBucketedUserConfig) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:978:17
[INFO] [stdout]     |
[INFO] [stdout] 978 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:976:1
[INFO] [stdout]     |
[INFO] [stdout] 976 | pub unsafe extern "C" fn devcycle_free_user(user: *mut CUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:986:17
[INFO] [stdout]     |
[INFO] [stdout] 986 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:984:1
[INFO] [stdout]     |
[INFO] [stdout] 984 | pub unsafe extern "C" fn devcycle_free_populated_user(user: *mut CPopulatedUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:994:17
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let _ = Box::from_raw(options);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:992:1
[INFO] [stdout]     |
[INFO] [stdout] 992 | pub unsafe extern "C" fn devcycle_free_event_queue_options(options: *mut CEventQueueOptions) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1009:26
[INFO] [stdout]      |
[INFO] [stdout] 1009 |     let json_str = match CStr::from_ptr(json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1000:1
[INFO] [stdout]      |
[INFO] [stdout] 1000 | pub unsafe extern "C" fn devcycle_user_from_json(json: *const c_char) -> *mut CUser {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1051:29
[INFO] [stdout]      |
[INFO] [stdout] 1051 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1039:1
[INFO] [stdout]      |
[INFO] [stdout] 1039 | / pub unsafe extern "C" fn devcycle_populate_user(
[INFO] [stdout] 1040 | |     sdk_key: *const c_char,
[INFO] [stdout] 1041 | |     user: *const CUser,
[INFO] [stdout] 1042 | | ) -> *mut CPopulatedUser {
[INFO] [stdout]      | |________________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1055:20
[INFO] [stdout]      |
[INFO] [stdout] 1055 |     let user_obj = (*user).0.clone();
[INFO] [stdout]      |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1076:26
[INFO] [stdout]      |
[INFO] [stdout] 1076 |     let json_str = match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1064:1
[INFO] [stdout]      |
[INFO] [stdout] 1064 | / pub unsafe extern "C" fn devcycle_populated_user_merge_client_custom_data(
[INFO] [stdout] 1065 | |     populated_user: *mut CPopulatedUser,
[INFO] [stdout] 1066 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 1067 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1099:20
[INFO] [stdout]      |
[INFO] [stdout] 1099 |     let pop = &mut (*populated_user).0;
[INFO] [stdout]      |                    ^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1123:24
[INFO] [stdout]      |
[INFO] [stdout] 1123 |     match CString::new((*result).0.feature_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1112:1
[INFO] [stdout]      |
[INFO] [stdout] 1112 | / pub unsafe extern "C" fn devcycle_variable_result_get_feature_id(
[INFO] [stdout] 1113 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1114 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1152:24
[INFO] [stdout]      |
[INFO] [stdout] 1152 |     match CString::new((*result).0.variation_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1141:1
[INFO] [stdout]      |
[INFO] [stdout] 1141 | / pub unsafe extern "C" fn devcycle_variable_result_get_variation_id(
[INFO] [stdout] 1142 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1143 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1181:29
[INFO] [stdout]      |
[INFO] [stdout] 1181 |     let reason_str = match &(*result).0.eval_reason {
[INFO] [stdout]      |                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1170:1
[INFO] [stdout]      |
[INFO] [stdout] 1170 | / pub unsafe extern "C" fn devcycle_variable_result_get_evaluation_reason(
[INFO] [stdout] 1171 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1172 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1212:12
[INFO] [stdout]      |
[INFO] [stdout] 1212 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1202:1
[INFO] [stdout]      |
[INFO] [stdout] 1202 | / pub unsafe extern "C" fn devcycle_variable_result_is_error(
[INFO] [stdout] 1203 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1204 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1238:12
[INFO] [stdout]      |
[INFO] [stdout] 1238 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1227:1
[INFO] [stdout]      |
[INFO] [stdout] 1227 | / pub unsafe extern "C" fn devcycle_variable_result_get_error(
[INFO] [stdout] 1228 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1229 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1273:61
[INFO] [stdout]      |
[INFO] [stdout] 1273 |     let (is_error, eval_reason_str, error_message) = match &(*result).0.eval_reason {
[INFO] [stdout]      |                                                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1262:1
[INFO] [stdout]      |
[INFO] [stdout] 1262 | / pub unsafe extern "C" fn devcycle_variable_result_to_full_json(
[INFO] [stdout] 1263 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1264 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1278:25
[INFO] [stdout]      |
[INFO] [stdout] 1278 |         "variableType": (*result).0.variable_type,
[INFO] [stdout]      |                         ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1279:26
[INFO] [stdout]      |
[INFO] [stdout] 1279 |         "variableValue": (*result).0.variable_value,
[INFO] [stdout]      |                          ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1280:22
[INFO] [stdout]      |
[INFO] [stdout] 1280 |         "featureId": (*result).0.feature_id,
[INFO] [stdout]      |                      ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1281:24
[INFO] [stdout]      |
[INFO] [stdout] 1281 |         "variationId": (*result).0.variation_id,
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1347:29
[INFO] [stdout]      |
[INFO] [stdout] 1347 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1329:1
[INFO] [stdout]      |
[INFO] [stdout] 1329 | / pub unsafe extern "C" fn devcycle_queue_event(
[INFO] [stdout] 1330 | |     sdk_key: *const c_char,
[INFO] [stdout] 1331 | |     user_json: *const c_char,
[INFO] [stdout] 1332 | |     event_type_str: *const c_char,
[INFO] [stdout] ...    |
[INFO] [stdout] 1336 | |     meta_data_json: *const c_char,
[INFO] [stdout] 1337 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1351:31
[INFO] [stdout]      |
[INFO] [stdout] 1351 |     let user_json_str = match CStr::from_ptr(user_json).to_str() {
[INFO] [stdout]      |                               ^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1361:32
[INFO] [stdout]      |
[INFO] [stdout] 1361 |     let event_type_raw = match CStr::from_ptr(event_type_str).to_str() {
[INFO] [stdout]      |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1387:15
[INFO] [stdout]      |
[INFO] [stdout] 1387 |         match CStr::from_ptr(custom_type).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1402:15
[INFO] [stdout]      |
[INFO] [stdout] 1402 |         match CStr::from_ptr(target).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1418:15
[INFO] [stdout]      |
[INFO] [stdout] 1418 |         match CStr::from_ptr(meta_data_json).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BucketingConfiguration` is never constructed
[INFO] [stdout]   --> src/config/config.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub(crate) struct BucketingConfiguration {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SSEHost` is never constructed
[INFO] [stdout]   --> src/config/config.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct SSEHost {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_feature_for_key` is never used
[INFO] [stdout]    --> src/config/config.rs:179:19
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl ConfigBody {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub(crate) fn get_feature_for_key(&self, key: &str) -> Option<&ConfigFeature> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_config` is never used
[INFO] [stdout]   --> src/config/configmanager.rs:19:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) fn has_config(sdk_key: &str) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `target`, `custom_type`, `client_date`, `value`, and `meta_data` are never read
[INFO] [stdout]    --> src/events/event.rs:109:16
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub(crate) struct Event {
[INFO] [stdout]     |                   ----- fields in this struct
[INFO] [stdout] 108 |     pub(crate) event_type: EventType,
[INFO] [stdout] 109 |     pub(crate) target: String,
[INFO] [stdout]     |                ^^^^^^
[INFO] [stdout] 110 |     pub(crate) custom_type: String,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 111 |     pub(crate) user_id: String,
[INFO] [stdout] 112 |     pub(crate) client_date: std::time::Instant,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 113 |     pub(crate) value: f64,
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] 114 |     pub(crate) feature_vars: HashMap<String, String>,
[INFO] [stdout] 115 |     pub(crate) meta_data: HashMap<String, serde_json::Value>,
[INFO] [stdout]     |                ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event` and `user` are never read
[INFO] [stdout]    --> src/events/event.rs:119:16
[INFO] [stdout]     |
[INFO] [stdout] 118 | pub(crate) struct UserEventData {
[INFO] [stdout]     |                   ------------- fields in this struct
[INFO] [stdout] 119 |     pub(crate) event: Event,
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] 120 |     pub(crate) user: User,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `user` is never read
[INFO] [stdout]    --> src/events/event.rs:124:16
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub(crate) struct UserEventsBatchRecord {
[INFO] [stdout]     |                   --------------------- field in this struct
[INFO] [stdout] 124 |     pub(crate) user: PopulatedUser,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_type`, `variable_key`, `feature_id`, `variation_id`, and `eval_metadata` are never read
[INFO] [stdout]    --> src/events/event.rs:129:16
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub(crate) struct AggEventQueueRawMessage {
[INFO] [stdout]     |                   ----------------------- fields in this struct
[INFO] [stdout] 129 |     pub(crate) event_type: EventType,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 130 |     pub(crate) variable_key: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 131 |     pub(crate) feature_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 132 |     pub(crate) variation_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 133 |     pub(crate) eval_metadata: EvalReasonAggMap,
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/events/event_queue.rs:51:16
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct EventQueue {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 51 |     pub(crate) sdk_key: String,
[INFO] [stdout]    |                ^^^^^^^
[INFO] [stdout] 52 |     pub(crate) platform_data: Arc<PlatformData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^
[INFO] [stdout] 53 |     pub(crate) agg_event_queue_raw_tx: mpsc::Sender<AggEventQueueRawMessage>,
[INFO] [stdout] 54 |     pub(crate) agg_event_queue_raw_rx: mpsc::Receiver<AggEventQueueRawMessage>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     pub(crate) user_event_queue_raw_tx: mpsc::Sender<UserEventData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 56 |     pub(crate) user_event_queue_raw_rx: mpsc::Receiver<UserEventData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 57 |     pub(crate) agg_event_queue: AggregateEventQueue,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub(crate) queue_access_mutex: tokio::sync::Mutex<()>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     pub(crate) events_flushed: AtomicI64,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^
[INFO] [stdout] 62 |     pub(crate) events_dropped: AtomicI64,
[INFO] [stdout] 63 |     pub(crate) events_reported: AtomicI64,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `queue_event`, `merge_agg_event_queue_keys`, `process_user_events`, `process_aggregate_event`, and `process_events` are never used
[INFO] [stdout]    --> src/events/event_queue.rs:172:18
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl EventQueue {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn queue_event(&self, user: User, event: Event) -> Result<bool, DevCycleError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub(crate) async fn merge_agg_event_queue_keys(&mut self, config_body: &ConfigBody) {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     async unsafe fn process_user_events(
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub(crate) async fn process_aggregate_event(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub(crate) async fn process_events(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_event_queue` is never used
[INFO] [stdout]   --> src/events/event_queue_manager.rs:19:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) fn has_event_queue(sdk_key: &str) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum FilterType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterSubType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum FilterSubType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterOrOperator` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:446:11
[INFO] [stdout]     |
[INFO] [stdout] 446 | pub trait FilterOrOperator {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PassFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:524:12
[INFO] [stdout]     |
[INFO] [stdout] 524 | pub struct PassFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl PassFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 526 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FailFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:535:12
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub struct FailFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:537:12
[INFO] [stdout]     |
[INFO] [stdout] 536 | impl FailFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 537 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `AllFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:546:10
[INFO] [stdout]     |
[INFO] [stdout] 546 | pub type AllFilter = PassFilter;
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `OptInFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:547:10
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub type OptInFilter = FailFilter;
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BaseFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:550:12
[INFO] [stdout]     |
[INFO] [stdout] 550 | pub struct BaseFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:557:12
[INFO] [stdout]     |
[INFO] [stdout] 557 | pub struct UserFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `evaluate` and `compile` are never used
[INFO] [stdout]    --> src/segmentation/filters.rs:566:12
[INFO] [stdout]     |
[INFO] [stdout] 565 | impl UserFilter {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 566 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     pub fn compile(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterTrait` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:647:7
[INFO] [stdout]     |
[INFO] [stdout] 647 | trait FilterTrait {
[INFO] [stdout]     |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Audience` is never constructed
[INFO] [stdout]   --> src/segmentation/target.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Audience {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SemverOptions` is never constructed
[INFO] [stdout]  --> src/segmentation/versioncompare.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | struct SemverOptions {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Compare` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | trait Compare {
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_valid_parts` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:75:4
[INFO] [stdout]    |
[INFO] [stdout] 75 | fn has_valid_parts(lexicographical: bool, parts: &[String]) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `user` and `feature_vars` are never read
[INFO] [stdout]   --> src/user/user.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct UserFeatureData<'a> {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 70 |     user: &'a User,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 71 |     feature_vars: &'a HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `user` is never read
[INFO] [stdout]    --> src/user/user.rs:177:16
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub struct BucketedUserConfig {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub(crate) user: PopulatedUser,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const VARIABLE_EVALUATED_EVENT: &str = "variableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const VARIABLE_DEFAULTED_EVENT: &str = "variableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const AGG_VARIABLE_EVALUATED_EVENT: &str = "aggVariableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const AGG_VARIABLE_DEFAULTED_EVENT: &str = "aggVariableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUB_TYPE_IP` is never used
[INFO] [stdout]   --> src/util/constants.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const SUB_TYPE_IP: &str = "ip";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_STRING` is never used
[INFO] [stdout]   --> src/util/constants.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const DATA_KEY_TYPE_STRING: &str = "String";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_BOOLEAN` is never used
[INFO] [stdout]   --> src/util/constants.rs:40:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub const DATA_KEY_TYPE_BOOLEAN: &str = "Boolean";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_NUMBER` is never used
[INFO] [stdout]   --> src/util/constants.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub const DATA_KEY_TYPE_NUMBER: &str = "Number";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ROLLOUT_TYPE_PERCENTAGE` is never used
[INFO] [stdout]   --> src/util/constants.rs:49:11
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub const ROLLOUT_TYPE_PERCENTAGE: &str = "percentage";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIABLE` is never used
[INFO] [stdout]   --> src/util/errors.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const MISSING_VARIABLE: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIATION` is never used
[INFO] [stdout]   --> src/util/errors.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub const MISSING_VARIATION: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_targets` is never used
[INFO] [stdout]   --> src/util/errors.rs:51:15
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub(crate) fn failed_user_does_not_qualify_for_targets() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_rollouts` is never used
[INFO] [stdout]   --> src/util/errors.rs:55:15
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub(crate) fn failed_user_does_not_qualify_for_rollouts() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `variable_type_mismatch` is never used
[INFO] [stdout]   --> src/util/errors.rs:83:15
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub(crate) fn variable_type_mismatch() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_to_set_client_custom_data` is never used
[INFO] [stdout]   --> src/util/errors.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn failed_to_set_client_custom_data() -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]   --> src/util/errors.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn parse_error(msg: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `missing_field` is never used
[INFO] [stdout]   --> src/util/errors.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn missing_field(field: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling hyper-util v0.1.18
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling reqwest v0.12.24
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `protobuf`
[INFO] [stdout]   --> src/lib.rs:61:7
[INFO] [stdout]    |
[INFO] [stdout] 61 | #[cfg(feature = "protobuf")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `console_error_panic_hook`, `default`, `libc`, `serde-wasm-bindgen`, `wasm`, `wasm-bindgen`, and `wasm-bindgen-futures`
[INFO] [stdout]    = help: consider adding `protobuf` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bucketing::*`
[INFO] [stdout]   --> src/bucketing/mod.rs:10:16
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub(crate) use bucketing::*;
[INFO] [stdout]    |                ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `filters::*`
[INFO] [stdout]  --> src/segmentation/mod.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub(crate) use filters::*;
[INFO] [stdout]   |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::DevCycleError`
[INFO] [stdout]  --> src/util/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use errors::DevCycleError;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:25:25
[INFO] [stdout]    |
[INFO] [stdout] 25 |             return f64::NAN;
[INFO] [stdout]    |                         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:44:56
[INFO] [stdout]    |
[INFO] [stdout] 44 |                     Err(_) => v1_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |                     Err(_) => v2_parts_final.push(f64::NAN),
[INFO] [stdout]    |                                                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:163:22
[INFO] [stdout]     |
[INFO] [stdout] 163 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:205:22
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:244:26
[INFO] [stdout]     |
[INFO] [stdout] 244 |             let result = unsafe {
[INFO] [stdout]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:284:26
[INFO] [stdout]     |
[INFO] [stdout] 284 |             let result = unsafe {
[INFO] [stdout]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:310:22
[INFO] [stdout]     |
[INFO] [stdout] 310 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:339:22
[INFO] [stdout]     |
[INFO] [stdout] 339 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:454:22
[INFO] [stdout]     |
[INFO] [stdout] 454 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:491:22
[INFO] [stdout]     |
[INFO] [stdout] 491 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:538:26
[INFO] [stdout]     |
[INFO] [stdout] 538 |             let result = unsafe {
[INFO] [stdout]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:574:26
[INFO] [stdout]     |
[INFO] [stdout] 574 |             let result = unsafe {
[INFO] [stdout]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:651:27
[INFO] [stdout]     |
[INFO] [stdout] 651 |         let test_result = unsafe {
[INFO] [stdout]     |                           ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:660:27
[INFO] [stdout]     |
[INFO] [stdout] 660 |         let prod_result = unsafe {
[INFO] [stdout]     |                           ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:686:32
[INFO] [stdout]     |
[INFO] [stdout] 686 |         let bucketing_result = unsafe {
[INFO] [stdout]     |                                ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:736:22
[INFO] [stdout]     |
[INFO] [stdout] 736 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:811:22
[INFO] [stdout]     |
[INFO] [stdout] 811 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/bucketing/bucketing_tests.rs:927:22
[INFO] [stdout]     |
[INFO] [stdout] 927 |         let result = unsafe {
[INFO] [stdout]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config_ref`
[INFO] [stdout]    --> src/events/event_queue_tests.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |         let config_ref = get_config(sdk_key).unwrap();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_config_ref`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_queue`
[INFO] [stdout]    --> src/events/event_queue_tests.rs:151:13
[INFO] [stdout]     |
[INFO] [stdout] 151 |         let event_queue = event_queue_manager::get_event_queue(sdk_key).unwrap();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_queue`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_queue`
[INFO] [stdout]    --> src/events/event_queue_tests.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let event_queue = event_queue_manager::get_event_queue(sdk_key).unwrap();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_queue`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:193:51
[INFO] [stdout]     |
[INFO] [stdout] 193 |                     constants::COMPARATOR_EQUAL | "=" => {
[INFO] [stdout]     |                     ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:199:61
[INFO] [stdout]     |
[INFO] [stdout] 199 | ...                   constants::COMPARATOR_GREATER | ">" => result > 0.0,
[INFO] [stdout]     |                       -----------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:200:67
[INFO] [stdout]     |
[INFO] [stdout] 200 | ...                   constants::COMPARATOR_GREATER_EQUAL | ">=" => result >= 0.0,
[INFO] [stdout]     |                       -----------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:201:58
[INFO] [stdout]     |
[INFO] [stdout] 201 | ...                   constants::COMPARATOR_LESS | "<" => result < 0.0,
[INFO] [stdout]     |                       --------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:202:64
[INFO] [stdout]     |
[INFO] [stdout] 202 | ...                   constants::COMPARATOR_LESS_EQUAL | "<=" => result <= 0.0,
[INFO] [stdout]     |                       --------------------------------   ^^^^ no value can reach this
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/segmentation/filters.rs:287:47
[INFO] [stdout]     |
[INFO] [stdout] 287 |                 constants::COMPARATOR_EQUAL | "=" => user_value == filter_value,
[INFO] [stdout]     |                 ---------------------------   ^^^ no value can reach this
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 matches all the relevant values
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/segmentation/filter_tests.rs:1405:13
[INFO] [stdout]      |
[INFO] [stdout] 1405 |         let mut user = create_test_user();
[INFO] [stdout]      |             ----^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `filter`
[INFO] [stdout]     --> src/segmentation/filter_tests.rs:1392:13
[INFO] [stdout]      |
[INFO] [stdout] 1392 |         let filter = Filter {
[INFO] [stdout]      |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `user`
[INFO] [stdout]     --> src/segmentation/filter_tests.rs:1405:13
[INFO] [stdout]      |
[INFO] [stdout] 1405 |         let mut user = create_test_user();
[INFO] [stdout]      |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audiences`
[INFO] [stdout]     --> src/segmentation/filter_tests.rs:1406:13
[INFO] [stdout]      |
[INFO] [stdout] 1406 |         let audiences: HashMap<String, NoIdAudience> = HashMap::new();
[INFO] [stdout]      |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audiences`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `client_custom_data`
[INFO] [stdout]     --> src/segmentation/filter_tests.rs:1407:13
[INFO] [stdout]      |
[INFO] [stdout] 1407 |         let client_custom_data: HashMap<String, serde_json::Value> = HashMap::new();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_client_custom_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:214:11
[INFO] [stdout]     |
[INFO] [stdout] 214 |     match CStr::from_ptr(sdk_key).to_str() {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:206:1
[INFO] [stdout]     |
[INFO] [stdout] 206 | unsafe fn parse_sdk_key(sdk_key: *const c_char) -> Result<String, DevCycleFFIErrorCode> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:236:29
[INFO] [stdout]     |
[INFO] [stdout] 236 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:230:1
[INFO] [stdout]     |
[INFO] [stdout] 230 | / pub unsafe extern "C" fn devcycle_init_event_queue(
[INFO] [stdout] 231 | |     sdk_key: *const c_char,
[INFO] [stdout] 232 | |     options: *const CEventQueueOptions,
[INFO] [stdout] 233 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:244:9
[INFO] [stdout]     |
[INFO] [stdout] 244 |         (*options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:293:29
[INFO] [stdout]     |
[INFO] [stdout] 293 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:278:1
[INFO] [stdout]     |
[INFO] [stdout] 278 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config(
[INFO] [stdout] 279 | |     sdk_key: *const c_char,
[INFO] [stdout] 280 | |     user: *const CPopulatedUser,
[INFO] [stdout] 281 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 282 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:298:26
[INFO] [stdout]     |
[INFO] [stdout] 298 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:304:19
[INFO] [stdout]     |
[INFO] [stdout] 304 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:371:29
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:356:1
[INFO] [stdout]     |
[INFO] [stdout] 356 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config_from_user(
[INFO] [stdout] 357 | |     sdk_key: *const c_char,
[INFO] [stdout] 358 | |     user: *const CUser,
[INFO] [stdout] 359 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 360 | | ) -> *mut CBucketedUserConfig {
[INFO] [stdout]     | |_____________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:376:20
[INFO] [stdout]     |
[INFO] [stdout] 376 |     let user_obj = (*user).0.clone();
[INFO] [stdout]     |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:424:29
[INFO] [stdout]     |
[INFO] [stdout] 424 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:410:1
[INFO] [stdout]     |
[INFO] [stdout] 410 | / pub unsafe extern "C" fn devcycle_set_config(
[INFO] [stdout] 411 | |     sdk_key: *const c_char,
[INFO] [stdout] 412 | |     config_json: *const c_char,
[INFO] [stdout] 413 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:429:33
[INFO] [stdout]     |
[INFO] [stdout] 429 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:508:29
[INFO] [stdout]     |
[INFO] [stdout] 508 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:494:1
[INFO] [stdout]     |
[INFO] [stdout] 494 | / pub unsafe extern "C" fn devcycle_set_client_custom_data(
[INFO] [stdout] 495 | |     sdk_key: *const c_char,
[INFO] [stdout] 496 | |     custom_data_json: *const c_char,
[INFO] [stdout] 497 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:513:38
[INFO] [stdout]     |
[INFO] [stdout] 513 |     let custom_data_json_str = match CStr::from_ptr(custom_data_json).to_str() {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:572:29
[INFO] [stdout]     |
[INFO] [stdout] 572 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:566:1
[INFO] [stdout]     |
[INFO] [stdout] 566 | / pub unsafe extern "C" fn devcycle_set_platform_data(
[INFO] [stdout] 567 | |     sdk_key: *const c_char,
[INFO] [stdout] 568 | |     platform_data_json: *const c_char,
[INFO] [stdout] 569 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:585:40
[INFO] [stdout]     |
[INFO] [stdout] 585 |     let platform_data_json_str = match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:645:29
[INFO] [stdout]     |
[INFO] [stdout] 645 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:628:1
[INFO] [stdout]     |
[INFO] [stdout] 628 | / pub unsafe extern "C" fn devcycle_init_sdk_key(
[INFO] [stdout] 629 | |     sdk_key: *const c_char,
[INFO] [stdout] 630 | |     config_json: *const c_char,
[INFO] [stdout] 631 | |     event_queue_options: *const CEventQueueOptions,
[INFO] [stdout] 632 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 633 | |     platform_data_json: *const c_char,
[INFO] [stdout] 634 | | ) -> i32 {
[INFO] [stdout]     | |________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:650:33
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:665:15
[INFO] [stdout]     |
[INFO] [stdout] 665 |         match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:714:9
[INFO] [stdout]     |
[INFO] [stdout] 714 |         (*event_queue_options).0.clone()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:722:19
[INFO] [stdout]     |
[INFO] [stdout] 722 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:793:29
[INFO] [stdout]     |
[INFO] [stdout] 793 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:779:1
[INFO] [stdout]     |
[INFO] [stdout] 779 | / pub unsafe extern "C" fn devcycle_variable_for_user(
[INFO] [stdout] 780 | |     sdk_key: *const c_char,
[INFO] [stdout] 781 | |     user: *const CPopulatedUser,
[INFO] [stdout] 782 | |     variable_key: *const c_char,
[INFO] [stdout] 783 | |     variable_type: *const c_char,
[INFO] [stdout] 784 | | ) -> *mut CVariableForUserResult {
[INFO] [stdout]     | |________________________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:797:34
[INFO] [stdout]     |
[INFO] [stdout] 797 |     let variable_key_str = match CStr::from_ptr(variable_key).to_str() {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:807:35
[INFO] [stdout]     |
[INFO] [stdout] 807 |     let variable_type_str = match CStr::from_ptr(variable_type).to_str() {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:817:26
[INFO] [stdout]     |
[INFO] [stdout] 817 |     let populated_user = (*user).0.clone();
[INFO] [stdout]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:859:34
[INFO] [stdout]     |
[INFO] [stdout] 859 |     match serde_json::to_string(&(*result).0.variable_value) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:848:1
[INFO] [stdout]     |
[INFO] [stdout] 848 | / pub unsafe extern "C" fn devcycle_variable_result_to_json(
[INFO] [stdout] 849 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 850 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:897:24
[INFO] [stdout]     |
[INFO] [stdout] 897 |     match CString::new((*result).0.variable_type.clone()) {
[INFO] [stdout]     |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:886:1
[INFO] [stdout]     |
[INFO] [stdout] 886 | / pub unsafe extern "C" fn devcycle_variable_result_get_type(
[INFO] [stdout] 887 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 888 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:926:34
[INFO] [stdout]     |
[INFO] [stdout] 926 |     match serde_json::to_string(&(*config).0) {
[INFO] [stdout]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]     |
[INFO] [stdout]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:915:1
[INFO] [stdout]     |
[INFO] [stdout] 915 | / pub unsafe extern "C" fn devcycle_bucketed_config_to_json(
[INFO] [stdout] 916 | |     config: *const CBucketedUserConfig,
[INFO] [stdout] 917 | | ) -> *mut c_char {
[INFO] [stdout]     | |________________^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:954:17
[INFO] [stdout]     |
[INFO] [stdout] 954 |         let _ = Box::from_raw(result);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:952:1
[INFO] [stdout]     |
[INFO] [stdout] 952 | pub unsafe extern "C" fn devcycle_free_variable_result(result: *mut CVariableForUserResult) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CString::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:962:17
[INFO] [stdout]     |
[INFO] [stdout] 962 |         let _ = CString::from_raw(s);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:960:1
[INFO] [stdout]     |
[INFO] [stdout] 960 | pub unsafe extern "C" fn devcycle_free_string(s: *mut c_char) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:970:17
[INFO] [stdout]     |
[INFO] [stdout] 970 |         let _ = Box::from_raw(config);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:968:1
[INFO] [stdout]     |
[INFO] [stdout] 968 | pub unsafe extern "C" fn devcycle_free_bucketed_config(config: *mut CBucketedUserConfig) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:978:17
[INFO] [stdout]     |
[INFO] [stdout] 978 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:976:1
[INFO] [stdout]     |
[INFO] [stdout] 976 | pub unsafe extern "C" fn devcycle_free_user(user: *mut CUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:986:17
[INFO] [stdout]     |
[INFO] [stdout] 986 |         let _ = Box::from_raw(user);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:984:1
[INFO] [stdout]     |
[INFO] [stdout] 984 | pub unsafe extern "C" fn devcycle_free_populated_user(user: *mut CPopulatedUser) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stdout]    --> src/ffi.rs:994:17
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let _ = Box::from_raw(options);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> src/ffi.rs:992:1
[INFO] [stdout]     |
[INFO] [stdout] 992 | pub unsafe extern "C" fn devcycle_free_event_queue_options(options: *mut CEventQueueOptions) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1009:26
[INFO] [stdout]      |
[INFO] [stdout] 1009 |     let json_str = match CStr::from_ptr(json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1000:1
[INFO] [stdout]      |
[INFO] [stdout] 1000 | pub unsafe extern "C" fn devcycle_user_from_json(json: *const c_char) -> *mut CUser {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1051:29
[INFO] [stdout]      |
[INFO] [stdout] 1051 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1039:1
[INFO] [stdout]      |
[INFO] [stdout] 1039 | / pub unsafe extern "C" fn devcycle_populate_user(
[INFO] [stdout] 1040 | |     sdk_key: *const c_char,
[INFO] [stdout] 1041 | |     user: *const CUser,
[INFO] [stdout] 1042 | | ) -> *mut CPopulatedUser {
[INFO] [stdout]      | |________________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1055:20
[INFO] [stdout]      |
[INFO] [stdout] 1055 |     let user_obj = (*user).0.clone();
[INFO] [stdout]      |                    ^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1076:26
[INFO] [stdout]      |
[INFO] [stdout] 1076 |     let json_str = match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1064:1
[INFO] [stdout]      |
[INFO] [stdout] 1064 | / pub unsafe extern "C" fn devcycle_populated_user_merge_client_custom_data(
[INFO] [stdout] 1065 | |     populated_user: *mut CPopulatedUser,
[INFO] [stdout] 1066 | |     client_custom_data_json: *const c_char,
[INFO] [stdout] 1067 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1099:20
[INFO] [stdout]      |
[INFO] [stdout] 1099 |     let pop = &mut (*populated_user).0;
[INFO] [stdout]      |                    ^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1123:24
[INFO] [stdout]      |
[INFO] [stdout] 1123 |     match CString::new((*result).0.feature_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1112:1
[INFO] [stdout]      |
[INFO] [stdout] 1112 | / pub unsafe extern "C" fn devcycle_variable_result_get_feature_id(
[INFO] [stdout] 1113 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1114 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1152:24
[INFO] [stdout]      |
[INFO] [stdout] 1152 |     match CString::new((*result).0.variation_id.clone()) {
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1141:1
[INFO] [stdout]      |
[INFO] [stdout] 1141 | / pub unsafe extern "C" fn devcycle_variable_result_get_variation_id(
[INFO] [stdout] 1142 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1143 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1181:29
[INFO] [stdout]      |
[INFO] [stdout] 1181 |     let reason_str = match &(*result).0.eval_reason {
[INFO] [stdout]      |                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1170:1
[INFO] [stdout]      |
[INFO] [stdout] 1170 | / pub unsafe extern "C" fn devcycle_variable_result_get_evaluation_reason(
[INFO] [stdout] 1171 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1172 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1212:12
[INFO] [stdout]      |
[INFO] [stdout] 1212 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1202:1
[INFO] [stdout]      |
[INFO] [stdout] 1202 | / pub unsafe extern "C" fn devcycle_variable_result_is_error(
[INFO] [stdout] 1203 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1204 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1238:12
[INFO] [stdout]      |
[INFO] [stdout] 1238 |     match &(*result).0.eval_reason {
[INFO] [stdout]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1227:1
[INFO] [stdout]      |
[INFO] [stdout] 1227 | / pub unsafe extern "C" fn devcycle_variable_result_get_error(
[INFO] [stdout] 1228 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1229 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1273:61
[INFO] [stdout]      |
[INFO] [stdout] 1273 |     let (is_error, eval_reason_str, error_message) = match &(*result).0.eval_reason {
[INFO] [stdout]      |                                                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1262:1
[INFO] [stdout]      |
[INFO] [stdout] 1262 | / pub unsafe extern "C" fn devcycle_variable_result_to_full_json(
[INFO] [stdout] 1263 | |     result: *const CVariableForUserResult,
[INFO] [stdout] 1264 | | ) -> *mut c_char {
[INFO] [stdout]      | |________________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1278:25
[INFO] [stdout]      |
[INFO] [stdout] 1278 |         "variableType": (*result).0.variable_type,
[INFO] [stdout]      |                         ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1279:26
[INFO] [stdout]      |
[INFO] [stdout] 1279 |         "variableValue": (*result).0.variable_value,
[INFO] [stdout]      |                          ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1280:22
[INFO] [stdout]      |
[INFO] [stdout] 1280 |         "featureId": (*result).0.feature_id,
[INFO] [stdout]      |                      ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1281:24
[INFO] [stdout]      |
[INFO] [stdout] 1281 |         "variationId": (*result).0.variation_id,
[INFO] [stdout]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stdout]      |
[INFO] [stdout]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1347:29
[INFO] [stdout]      |
[INFO] [stdout] 1347 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stdout]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]     --> src/ffi.rs:1329:1
[INFO] [stdout]      |
[INFO] [stdout] 1329 | / pub unsafe extern "C" fn devcycle_queue_event(
[INFO] [stdout] 1330 | |     sdk_key: *const c_char,
[INFO] [stdout] 1331 | |     user_json: *const c_char,
[INFO] [stdout] 1332 | |     event_type_str: *const c_char,
[INFO] [stdout] ...    |
[INFO] [stdout] 1336 | |     meta_data_json: *const c_char,
[INFO] [stdout] 1337 | | ) -> i32 {
[INFO] [stdout]      | |________^
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1351:31
[INFO] [stdout]      |
[INFO] [stdout] 1351 |     let user_json_str = match CStr::from_ptr(user_json).to_str() {
[INFO] [stdout]      |                               ^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1361:32
[INFO] [stdout]      |
[INFO] [stdout] 1361 |     let event_type_raw = match CStr::from_ptr(event_type_str).to_str() {
[INFO] [stdout]      |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1387:15
[INFO] [stdout]      |
[INFO] [stdout] 1387 |         match CStr::from_ptr(custom_type).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1402:15
[INFO] [stdout]      |
[INFO] [stdout] 1402 |         match CStr::from_ptr(target).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]     --> src/ffi.rs:1418:15
[INFO] [stdout]      |
[INFO] [stdout] 1418 |         match CStr::from_ptr(meta_data_json).to_str() {
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]      |
[INFO] [stdout]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SSEHost` is never constructed
[INFO] [stdout]   --> src/config/config.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct SSEHost {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_feature_for_key` is never used
[INFO] [stdout]    --> src/config/config.rs:179:19
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl ConfigBody {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub(crate) fn get_feature_for_key(&self, key: &str) -> Option<&ConfigFeature> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `target`, `custom_type`, `client_date`, `value`, and `meta_data` are never read
[INFO] [stdout]    --> src/events/event.rs:109:16
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub(crate) struct Event {
[INFO] [stdout]     |                   ----- fields in this struct
[INFO] [stdout] 108 |     pub(crate) event_type: EventType,
[INFO] [stdout] 109 |     pub(crate) target: String,
[INFO] [stdout]     |                ^^^^^^
[INFO] [stdout] 110 |     pub(crate) custom_type: String,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 111 |     pub(crate) user_id: String,
[INFO] [stdout] 112 |     pub(crate) client_date: std::time::Instant,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 113 |     pub(crate) value: f64,
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] 114 |     pub(crate) feature_vars: HashMap<String, String>,
[INFO] [stdout] 115 |     pub(crate) meta_data: HashMap<String, serde_json::Value>,
[INFO] [stdout]     |                ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `user` is never read
[INFO] [stdout]    --> src/events/event.rs:124:16
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub(crate) struct UserEventsBatchRecord {
[INFO] [stdout]     |                   --------------------- field in this struct
[INFO] [stdout] 124 |     pub(crate) user: PopulatedUser,
[INFO] [stdout]     |                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_type`, `variable_key`, `feature_id`, `variation_id`, and `eval_metadata` are never read
[INFO] [stdout]    --> src/events/event.rs:129:16
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub(crate) struct AggEventQueueRawMessage {
[INFO] [stdout]     |                   ----------------------- fields in this struct
[INFO] [stdout] 129 |     pub(crate) event_type: EventType,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 130 |     pub(crate) variable_key: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 131 |     pub(crate) feature_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^
[INFO] [stdout] 132 |     pub(crate) variation_id: String,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 133 |     pub(crate) eval_metadata: EvalReasonAggMap,
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `platform_data`, `agg_event_queue_raw_rx`, `agg_event_queue`, and `queue_access_mutex` are never read
[INFO] [stdout]   --> src/events/event_queue.rs:52:16
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct EventQueue {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 51 |     pub(crate) sdk_key: String,
[INFO] [stdout] 52 |     pub(crate) platform_data: Arc<PlatformData>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^
[INFO] [stdout] 53 |     pub(crate) agg_event_queue_raw_tx: mpsc::Sender<AggEventQueueRawMessage>,
[INFO] [stdout] 54 |     pub(crate) agg_event_queue_raw_rx: mpsc::Receiver<AggEventQueueRawMessage>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub(crate) agg_event_queue: AggregateEventQueue,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub(crate) queue_access_mutex: tokio::sync::Mutex<()>,
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `merge_agg_event_queue_keys`, `process_user_events`, `process_aggregate_event`, and `process_events` are never used
[INFO] [stdout]    --> src/events/event_queue.rs:187:25
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl EventQueue {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub(crate) async fn merge_agg_event_queue_keys(&mut self, config_body: &ConfigBody) {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     async unsafe fn process_user_events(
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub(crate) async fn process_aggregate_event(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub(crate) async fn process_events(
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_event_queue` is never used
[INFO] [stdout]   --> src/events/event_queue_manager.rs:19:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) fn has_event_queue(sdk_key: &str) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum FilterType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterSubType` is never used
[INFO] [stdout]   --> src/segmentation/filters.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum FilterSubType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterOrOperator` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:446:11
[INFO] [stdout]     |
[INFO] [stdout] 446 | pub trait FilterOrOperator {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PassFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:524:12
[INFO] [stdout]     |
[INFO] [stdout] 524 | pub struct PassFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl PassFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 526 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FailFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:535:12
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub struct FailFilter {}
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `evaluate` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:537:12
[INFO] [stdout]     |
[INFO] [stdout] 536 | impl FailFilter {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 537 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `AllFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:546:10
[INFO] [stdout]     |
[INFO] [stdout] 546 | pub type AllFilter = PassFilter;
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `OptInFilter` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:547:10
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub type OptInFilter = FailFilter;
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BaseFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:550:12
[INFO] [stdout]     |
[INFO] [stdout] 550 | pub struct BaseFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserFilter` is never constructed
[INFO] [stdout]    --> src/segmentation/filters.rs:557:12
[INFO] [stdout]     |
[INFO] [stdout] 557 | pub struct UserFilter {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `evaluate` and `compile` are never used
[INFO] [stdout]    --> src/segmentation/filters.rs:566:12
[INFO] [stdout]     |
[INFO] [stdout] 565 | impl UserFilter {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 566 |     pub fn evaluate(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     pub fn compile(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FilterTrait` is never used
[INFO] [stdout]    --> src/segmentation/filters.rs:647:7
[INFO] [stdout]     |
[INFO] [stdout] 647 | trait FilterTrait {
[INFO] [stdout]     |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Audience` is never constructed
[INFO] [stdout]   --> src/segmentation/target.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Audience {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SemverOptions` is never constructed
[INFO] [stdout]  --> src/segmentation/versioncompare.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | struct SemverOptions {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Compare` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | trait Compare {
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `has_valid_parts` is never used
[INFO] [stdout]   --> src/segmentation/versioncompare.rs:75:4
[INFO] [stdout]    |
[INFO] [stdout] 75 | fn has_valid_parts(lexicographical: bool, parts: &[String]) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `user` and `feature_vars` are never read
[INFO] [stdout]   --> src/user/user.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct UserFeatureData<'a> {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 70 |     user: &'a User,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 71 |     feature_vars: &'a HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const VARIABLE_EVALUATED_EVENT: &str = "variableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const VARIABLE_DEFAULTED_EVENT: &str = "variableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const AGG_VARIABLE_EVALUATED_EVENT: &str = "aggVariableEvaluated";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AGG_VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stdout]  --> src/util/constants.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const AGG_VARIABLE_DEFAULTED_EVENT: &str = "aggVariableDefaulted";
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUB_TYPE_IP` is never used
[INFO] [stdout]   --> src/util/constants.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const SUB_TYPE_IP: &str = "ip";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_STRING` is never used
[INFO] [stdout]   --> src/util/constants.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const DATA_KEY_TYPE_STRING: &str = "String";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_BOOLEAN` is never used
[INFO] [stdout]   --> src/util/constants.rs:40:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub const DATA_KEY_TYPE_BOOLEAN: &str = "Boolean";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_KEY_TYPE_NUMBER` is never used
[INFO] [stdout]   --> src/util/constants.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub const DATA_KEY_TYPE_NUMBER: &str = "Number";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ROLLOUT_TYPE_PERCENTAGE` is never used
[INFO] [stdout]   --> src/util/constants.rs:49:11
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub const ROLLOUT_TYPE_PERCENTAGE: &str = "percentage";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIABLE` is never used
[INFO] [stdout]   --> src/util/errors.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const MISSING_VARIABLE: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MISSING_VARIATION` is never used
[INFO] [stdout]   --> src/util/errors.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub const MISSING_VARIATION: DevCycleError = DevCycleError {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_targets` is never used
[INFO] [stdout]   --> src/util/errors.rs:51:15
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub(crate) fn failed_user_does_not_qualify_for_targets() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_user_does_not_qualify_for_rollouts` is never used
[INFO] [stdout]   --> src/util/errors.rs:55:15
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub(crate) fn failed_user_does_not_qualify_for_rollouts() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `variable_type_mismatch` is never used
[INFO] [stdout]   --> src/util/errors.rs:83:15
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub(crate) fn variable_type_mismatch() -> DevCycleError {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `failed_to_set_client_custom_data` is never used
[INFO] [stdout]   --> src/util/errors.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn failed_to_set_client_custom_data() -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]   --> src/util/errors.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn parse_error(msg: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `missing_field` is never used
[INFO] [stdout]   --> src/util/errors.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn missing_field(field: String) -> DevCycleError {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 3m 16s
[INFO] running `Command { std: "docker" "inspect" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: unexpected `cfg` condition value: `protobuf`
[INFO] [stderr]   --> src/lib.rs:61:7
[INFO] [stderr]    |
[INFO] [stderr] 61 | #[cfg(feature = "protobuf")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `console_error_panic_hook`, `default`, `libc`, `serde-wasm-bindgen`, `wasm`, `wasm-bindgen`, and `wasm-bindgen-futures`
[INFO] [stderr]    = help: consider adding `protobuf` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `bucketing::*`
[INFO] [stderr]   --> src/bucketing/mod.rs:10:16
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub(crate) use bucketing::*;
[INFO] [stderr]    |                ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `event::*`
[INFO] [stderr]   --> src/events/mod.rs:11:9
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub use event::*;
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `filters::*`
[INFO] [stderr]  --> src/segmentation/mod.rs:8:16
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub(crate) use filters::*;
[INFO] [stderr]   |                ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `errors::DevCycleError`
[INFO] [stderr]  --> src/util/mod.rs:8:9
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub use errors::DevCycleError;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]   --> src/segmentation/versioncompare.rs:25:25
[INFO] [stderr]    |
[INFO] [stderr] 25 |             return f64::NAN;
[INFO] [stderr]    |                         ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]   --> src/segmentation/versioncompare.rs:44:56
[INFO] [stderr]    |
[INFO] [stderr] 44 |                     Err(_) => v1_parts_final.push(f64::NAN),
[INFO] [stderr]    |                                                        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]   --> src/segmentation/versioncompare.rs:50:56
[INFO] [stderr]    |
[INFO] [stderr] 50 |                     Err(_) => v2_parts_final.push(f64::NAN),
[INFO] [stderr]    |                                                        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:193:51
[INFO] [stderr]     |
[INFO] [stderr] 193 |                     constants::COMPARATOR_EQUAL | "=" => {
[INFO] [stderr]     |                     ---------------------------   ^^^ no value can reach this
[INFO] [stderr]     |                     |
[INFO] [stderr]     |                     matches all the relevant values
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:199:61
[INFO] [stderr]     |
[INFO] [stderr] 199 | ...                   constants::COMPARATOR_GREATER | ">" => result > 0.0,
[INFO] [stderr]     |                       -----------------------------   ^^^ no value can reach this
[INFO] [stderr]     |                       |
[INFO] [stderr]     |                       matches all the relevant values
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:200:67
[INFO] [stderr]     |
[INFO] [stderr] 200 | ...                   constants::COMPARATOR_GREATER_EQUAL | ">=" => result >= 0.0,
[INFO] [stderr]     |                       -----------------------------------   ^^^^ no value can reach this
[INFO] [stderr]     |                       |
[INFO] [stderr]     |                       matches all the relevant values
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:201:58
[INFO] [stderr]     |
[INFO] [stderr] 201 | ...                   constants::COMPARATOR_LESS | "<" => result < 0.0,
[INFO] [stderr]     |                       --------------------------   ^^^ no value can reach this
[INFO] [stderr]     |                       |
[INFO] [stderr]     |                       matches all the relevant values
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:202:64
[INFO] [stderr]     |
[INFO] [stderr] 202 | ...                   constants::COMPARATOR_LESS_EQUAL | "<=" => result <= 0.0,
[INFO] [stderr]     |                       --------------------------------   ^^^^ no value can reach this
[INFO] [stderr]     |                       |
[INFO] [stderr]     |                       matches all the relevant values
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/segmentation/filters.rs:287:47
[INFO] [stderr]     |
[INFO] [stderr] 287 |                 constants::COMPARATOR_EQUAL | "=" => user_value == filter_value,
[INFO] [stderr]     |                 ---------------------------   ^^^ no value can reach this
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 matches all the relevant values
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:214:11
[INFO] [stderr]     |
[INFO] [stderr] 214 |     match CStr::from_ptr(sdk_key).to_str() {
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:206:1
[INFO] [stderr]     |
[INFO] [stderr] 206 | unsafe fn parse_sdk_key(sdk_key: *const c_char) -> Result<String, DevCycleFFIErrorCode> {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:236:29
[INFO] [stderr]     |
[INFO] [stderr] 236 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:230:1
[INFO] [stderr]     |
[INFO] [stderr] 230 | / pub unsafe extern "C" fn devcycle_init_event_queue(
[INFO] [stderr] 231 | |     sdk_key: *const c_char,
[INFO] [stderr] 232 | |     options: *const CEventQueueOptions,
[INFO] [stderr] 233 | | ) -> i32 {
[INFO] [stderr]     | |________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:244:9
[INFO] [stderr]     |
[INFO] [stderr] 244 |         (*options).0.clone()
[INFO] [stderr]     |         ^^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:293:29
[INFO] [stderr]     |
[INFO] [stderr] 293 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:278:1
[INFO] [stderr]     |
[INFO] [stderr] 278 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config(
[INFO] [stderr] 279 | |     sdk_key: *const c_char,
[INFO] [stderr] 280 | |     user: *const CPopulatedUser,
[INFO] [stderr] 281 | |     client_custom_data_json: *const c_char,
[INFO] [stderr] 282 | | ) -> *mut CBucketedUserConfig {
[INFO] [stderr]     | |_____________________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:298:26
[INFO] [stderr]     |
[INFO] [stderr] 298 |     let populated_user = (*user).0.clone();
[INFO] [stderr]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:304:19
[INFO] [stderr]     |
[INFO] [stderr] 304 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:371:29
[INFO] [stderr]     |
[INFO] [stderr] 371 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:356:1
[INFO] [stderr]     |
[INFO] [stderr] 356 | / pub unsafe extern "C" fn devcycle_generate_bucketed_config_from_user(
[INFO] [stderr] 357 | |     sdk_key: *const c_char,
[INFO] [stderr] 358 | |     user: *const CUser,
[INFO] [stderr] 359 | |     client_custom_data_json: *const c_char,
[INFO] [stderr] 360 | | ) -> *mut CBucketedUserConfig {
[INFO] [stderr]     | |_____________________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:376:20
[INFO] [stderr]     |
[INFO] [stderr] 376 |     let user_obj = (*user).0.clone();
[INFO] [stderr]     |                    ^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:424:29
[INFO] [stderr]     |
[INFO] [stderr] 424 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:410:1
[INFO] [stderr]     |
[INFO] [stderr] 410 | / pub unsafe extern "C" fn devcycle_set_config(
[INFO] [stderr] 411 | |     sdk_key: *const c_char,
[INFO] [stderr] 412 | |     config_json: *const c_char,
[INFO] [stderr] 413 | | ) -> i32 {
[INFO] [stderr]     | |________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:429:33
[INFO] [stderr]     |
[INFO] [stderr] 429 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stderr]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:508:29
[INFO] [stderr]     |
[INFO] [stderr] 508 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:494:1
[INFO] [stderr]     |
[INFO] [stderr] 494 | / pub unsafe extern "C" fn devcycle_set_client_custom_data(
[INFO] [stderr] 495 | |     sdk_key: *const c_char,
[INFO] [stderr] 496 | |     custom_data_json: *const c_char,
[INFO] [stderr] 497 | | ) -> i32 {
[INFO] [stderr]     | |________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:513:38
[INFO] [stderr]     |
[INFO] [stderr] 513 |     let custom_data_json_str = match CStr::from_ptr(custom_data_json).to_str() {
[INFO] [stderr]     |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:572:29
[INFO] [stderr]     |
[INFO] [stderr] 572 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:566:1
[INFO] [stderr]     |
[INFO] [stderr] 566 | / pub unsafe extern "C" fn devcycle_set_platform_data(
[INFO] [stderr] 567 | |     sdk_key: *const c_char,
[INFO] [stderr] 568 | |     platform_data_json: *const c_char,
[INFO] [stderr] 569 | | ) -> i32 {
[INFO] [stderr]     | |________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:585:40
[INFO] [stderr]     |
[INFO] [stderr] 585 |     let platform_data_json_str = match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stderr]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:645:29
[INFO] [stderr]     |
[INFO] [stderr] 645 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:628:1
[INFO] [stderr]     |
[INFO] [stderr] 628 | / pub unsafe extern "C" fn devcycle_init_sdk_key(
[INFO] [stderr] 629 | |     sdk_key: *const c_char,
[INFO] [stderr] 630 | |     config_json: *const c_char,
[INFO] [stderr] 631 | |     event_queue_options: *const CEventQueueOptions,
[INFO] [stderr] 632 | |     client_custom_data_json: *const c_char,
[INFO] [stderr] 633 | |     platform_data_json: *const c_char,
[INFO] [stderr] 634 | | ) -> i32 {
[INFO] [stderr]     | |________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:650:33
[INFO] [stderr]     |
[INFO] [stderr] 650 |     let config_json_str = match CStr::from_ptr(config_json).to_str() {
[INFO] [stderr]     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:665:15
[INFO] [stderr]     |
[INFO] [stderr] 665 |         match CStr::from_ptr(platform_data_json).to_str() {
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:714:9
[INFO] [stderr]     |
[INFO] [stderr] 714 |         (*event_queue_options).0.clone()
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:722:19
[INFO] [stderr]     |
[INFO] [stderr] 722 |             match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:793:29
[INFO] [stderr]     |
[INFO] [stderr] 793 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:779:1
[INFO] [stderr]     |
[INFO] [stderr] 779 | / pub unsafe extern "C" fn devcycle_variable_for_user(
[INFO] [stderr] 780 | |     sdk_key: *const c_char,
[INFO] [stderr] 781 | |     user: *const CPopulatedUser,
[INFO] [stderr] 782 | |     variable_key: *const c_char,
[INFO] [stderr] 783 | |     variable_type: *const c_char,
[INFO] [stderr] 784 | | ) -> *mut CVariableForUserResult {
[INFO] [stderr]     | |________________________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:797:34
[INFO] [stderr]     |
[INFO] [stderr] 797 |     let variable_key_str = match CStr::from_ptr(variable_key).to_str() {
[INFO] [stderr]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:807:35
[INFO] [stderr]     |
[INFO] [stderr] 807 |     let variable_type_str = match CStr::from_ptr(variable_type).to_str() {
[INFO] [stderr]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:817:26
[INFO] [stderr]     |
[INFO] [stderr] 817 |     let populated_user = (*user).0.clone();
[INFO] [stderr]     |                          ^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:859:34
[INFO] [stderr]     |
[INFO] [stderr] 859 |     match serde_json::to_string(&(*result).0.variable_value) {
[INFO] [stderr]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:848:1
[INFO] [stderr]     |
[INFO] [stderr] 848 | / pub unsafe extern "C" fn devcycle_variable_result_to_json(
[INFO] [stderr] 849 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 850 | | ) -> *mut c_char {
[INFO] [stderr]     | |________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:897:24
[INFO] [stderr]     |
[INFO] [stderr] 897 |     match CString::new((*result).0.variable_type.clone()) {
[INFO] [stderr]     |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:886:1
[INFO] [stderr]     |
[INFO] [stderr] 886 | / pub unsafe extern "C" fn devcycle_variable_result_get_type(
[INFO] [stderr] 887 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 888 | | ) -> *mut c_char {
[INFO] [stderr]     | |________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:926:34
[INFO] [stderr]     |
[INFO] [stderr] 926 |     match serde_json::to_string(&(*config).0) {
[INFO] [stderr]     |                                  ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]     |
[INFO] [stderr]     = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:915:1
[INFO] [stderr]     |
[INFO] [stderr] 915 | / pub unsafe extern "C" fn devcycle_bucketed_config_to_json(
[INFO] [stderr] 916 | |     config: *const CBucketedUserConfig,
[INFO] [stderr] 917 | | ) -> *mut c_char {
[INFO] [stderr]     | |________________^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:954:17
[INFO] [stderr]     |
[INFO] [stderr] 954 |         let _ = Box::from_raw(result);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:952:1
[INFO] [stderr]     |
[INFO] [stderr] 952 | pub unsafe extern "C" fn devcycle_free_variable_result(result: *mut CVariableForUserResult) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CString::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:962:17
[INFO] [stderr]     |
[INFO] [stderr] 962 |         let _ = CString::from_raw(s);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:960:1
[INFO] [stderr]     |
[INFO] [stderr] 960 | pub unsafe extern "C" fn devcycle_free_string(s: *mut c_char) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:970:17
[INFO] [stderr]     |
[INFO] [stderr] 970 |         let _ = Box::from_raw(config);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:968:1
[INFO] [stderr]     |
[INFO] [stderr] 968 | pub unsafe extern "C" fn devcycle_free_bucketed_config(config: *mut CBucketedUserConfig) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:978:17
[INFO] [stderr]     |
[INFO] [stderr] 978 |         let _ = Box::from_raw(user);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:976:1
[INFO] [stderr]     |
[INFO] [stderr] 976 | pub unsafe extern "C" fn devcycle_free_user(user: *mut CUser) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:986:17
[INFO] [stderr]     |
[INFO] [stderr] 986 |         let _ = Box::from_raw(user);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:984:1
[INFO] [stderr]     |
[INFO] [stderr] 984 | pub unsafe extern "C" fn devcycle_free_populated_user(user: *mut CPopulatedUser) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::boxed::Box::<T>::from_raw` is unsafe and requires unsafe block
[INFO] [stderr]    --> src/ffi.rs:994:17
[INFO] [stderr]     |
[INFO] [stderr] 994 |         let _ = Box::from_raw(options);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]     |
[INFO] [stderr]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]    --> src/ffi.rs:992:1
[INFO] [stderr]     |
[INFO] [stderr] 992 | pub unsafe extern "C" fn devcycle_free_event_queue_options(options: *mut CEventQueueOptions) {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1009:26
[INFO] [stderr]      |
[INFO] [stderr] 1009 |     let json_str = match CStr::from_ptr(json).to_str() {
[INFO] [stderr]      |                          ^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1000:1
[INFO] [stderr]      |
[INFO] [stderr] 1000 | pub unsafe extern "C" fn devcycle_user_from_json(json: *const c_char) -> *mut CUser {
[INFO] [stderr]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1051:29
[INFO] [stderr]      |
[INFO] [stderr] 1051 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1039:1
[INFO] [stderr]      |
[INFO] [stderr] 1039 | / pub unsafe extern "C" fn devcycle_populate_user(
[INFO] [stderr] 1040 | |     sdk_key: *const c_char,
[INFO] [stderr] 1041 | |     user: *const CUser,
[INFO] [stderr] 1042 | | ) -> *mut CPopulatedUser {
[INFO] [stderr]      | |________________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1055:20
[INFO] [stderr]      |
[INFO] [stderr] 1055 |     let user_obj = (*user).0.clone();
[INFO] [stderr]      |                    ^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1076:26
[INFO] [stderr]      |
[INFO] [stderr] 1076 |     let json_str = match CStr::from_ptr(client_custom_data_json).to_str() {
[INFO] [stderr]      |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1064:1
[INFO] [stderr]      |
[INFO] [stderr] 1064 | / pub unsafe extern "C" fn devcycle_populated_user_merge_client_custom_data(
[INFO] [stderr] 1065 | |     populated_user: *mut CPopulatedUser,
[INFO] [stderr] 1066 | |     client_custom_data_json: *const c_char,
[INFO] [stderr] 1067 | | ) -> i32 {
[INFO] [stderr]      | |________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1099:20
[INFO] [stderr]      |
[INFO] [stderr] 1099 |     let pop = &mut (*populated_user).0;
[INFO] [stderr]      |                    ^^^^^^^^^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1123:24
[INFO] [stderr]      |
[INFO] [stderr] 1123 |     match CString::new((*result).0.feature_id.clone()) {
[INFO] [stderr]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1112:1
[INFO] [stderr]      |
[INFO] [stderr] 1112 | / pub unsafe extern "C" fn devcycle_variable_result_get_feature_id(
[INFO] [stderr] 1113 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1114 | | ) -> *mut c_char {
[INFO] [stderr]      | |________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1152:24
[INFO] [stderr]      |
[INFO] [stderr] 1152 |     match CString::new((*result).0.variation_id.clone()) {
[INFO] [stderr]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1141:1
[INFO] [stderr]      |
[INFO] [stderr] 1141 | / pub unsafe extern "C" fn devcycle_variable_result_get_variation_id(
[INFO] [stderr] 1142 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1143 | | ) -> *mut c_char {
[INFO] [stderr]      | |________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1181:29
[INFO] [stderr]      |
[INFO] [stderr] 1181 |     let reason_str = match &(*result).0.eval_reason {
[INFO] [stderr]      |                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1170:1
[INFO] [stderr]      |
[INFO] [stderr] 1170 | / pub unsafe extern "C" fn devcycle_variable_result_get_evaluation_reason(
[INFO] [stderr] 1171 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1172 | | ) -> *mut c_char {
[INFO] [stderr]      | |________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1212:12
[INFO] [stderr]      |
[INFO] [stderr] 1212 |     match &(*result).0.eval_reason {
[INFO] [stderr]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1202:1
[INFO] [stderr]      |
[INFO] [stderr] 1202 | / pub unsafe extern "C" fn devcycle_variable_result_is_error(
[INFO] [stderr] 1203 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1204 | | ) -> i32 {
[INFO] [stderr]      | |________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1238:12
[INFO] [stderr]      |
[INFO] [stderr] 1238 |     match &(*result).0.eval_reason {
[INFO] [stderr]      |            ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1227:1
[INFO] [stderr]      |
[INFO] [stderr] 1227 | / pub unsafe extern "C" fn devcycle_variable_result_get_error(
[INFO] [stderr] 1228 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1229 | | ) -> *mut c_char {
[INFO] [stderr]      | |________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1273:61
[INFO] [stderr]      |
[INFO] [stderr] 1273 |     let (is_error, eval_reason_str, error_message) = match &(*result).0.eval_reason {
[INFO] [stderr]      |                                                             ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1262:1
[INFO] [stderr]      |
[INFO] [stderr] 1262 | / pub unsafe extern "C" fn devcycle_variable_result_to_full_json(
[INFO] [stderr] 1263 | |     result: *const CVariableForUserResult,
[INFO] [stderr] 1264 | | ) -> *mut c_char {
[INFO] [stderr]      | |________________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1278:25
[INFO] [stderr]      |
[INFO] [stderr] 1278 |         "variableType": (*result).0.variable_type,
[INFO] [stderr]      |                         ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1279:26
[INFO] [stderr]      |
[INFO] [stderr] 1279 |         "variableValue": (*result).0.variable_value,
[INFO] [stderr]      |                          ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1280:22
[INFO] [stderr]      |
[INFO] [stderr] 1280 |         "featureId": (*result).0.feature_id,
[INFO] [stderr]      |                      ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: dereference of raw pointer is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1281:24
[INFO] [stderr]      |
[INFO] [stderr] 1281 |         "variationId": (*result).0.variation_id,
[INFO] [stderr]      |                        ^^^^^^^^^ dereference of raw pointer
[INFO] [stderr]      |
[INFO] [stderr]      = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `ffi::parse_sdk_key` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1347:29
[INFO] [stderr]      |
[INFO] [stderr] 1347 |     let sdk_key_str = match parse_sdk_key(sdk_key) {
[INFO] [stderr]      |                             ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stderr]     --> src/ffi.rs:1329:1
[INFO] [stderr]      |
[INFO] [stderr] 1329 | / pub unsafe extern "C" fn devcycle_queue_event(
[INFO] [stderr] 1330 | |     sdk_key: *const c_char,
[INFO] [stderr] 1331 | |     user_json: *const c_char,
[INFO] [stderr] 1332 | |     event_type_str: *const c_char,
[INFO] [stderr] ...    |
[INFO] [stderr] 1336 | |     meta_data_json: *const c_char,
[INFO] [stderr] 1337 | | ) -> i32 {
[INFO] [stderr]      | |________^
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1351:31
[INFO] [stderr]      |
[INFO] [stderr] 1351 |     let user_json_str = match CStr::from_ptr(user_json).to_str() {
[INFO] [stderr]      |                               ^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1361:32
[INFO] [stderr]      |
[INFO] [stderr] 1361 |     let event_type_raw = match CStr::from_ptr(event_type_str).to_str() {
[INFO] [stderr]      |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1387:15
[INFO] [stderr]      |
[INFO] [stderr] 1387 |         match CStr::from_ptr(custom_type).to_str() {
[INFO] [stderr]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1402:15
[INFO] [stderr]      |
[INFO] [stderr] 1402 |         match CStr::from_ptr(target).to_str() {
[INFO] [stderr]      |               ^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stderr]     --> src/ffi.rs:1418:15
[INFO] [stderr]      |
[INFO] [stderr] 1418 |         match CStr::from_ptr(meta_data_json).to_str() {
[INFO] [stderr]      |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stderr]      |
[INFO] [stderr]      = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stderr]      = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BucketingConfiguration` is never constructed
[INFO] [stderr]   --> src/config/config.rs:70:19
[INFO] [stderr]    |
[INFO] [stderr] 70 | pub(crate) struct BucketingConfiguration {
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SSEHost` is never constructed
[INFO] [stderr]   --> src/config/config.rs:84:12
[INFO] [stderr]    |
[INFO] [stderr] 84 | pub struct SSEHost {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_feature_for_key` is never used
[INFO] [stderr]    --> src/config/config.rs:179:19
[INFO] [stderr]     |
[INFO] [stderr] 128 | impl ConfigBody {
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 179 |     pub(crate) fn get_feature_for_key(&self, key: &str) -> Option<&ConfigFeature> {
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `has_config` is never used
[INFO] [stderr]   --> src/config/configmanager.rs:19:15
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub(crate) fn has_config(sdk_key: &str) -> bool {
[INFO] [stderr]    |               ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `target`, `custom_type`, `client_date`, `value`, and `meta_data` are never read
[INFO] [stderr]    --> src/events/event.rs:109:16
[INFO] [stderr]     |
[INFO] [stderr] 107 | pub(crate) struct Event {
[INFO] [stderr]     |                   ----- fields in this struct
[INFO] [stderr] 108 |     pub(crate) event_type: EventType,
[INFO] [stderr] 109 |     pub(crate) target: String,
[INFO] [stderr]     |                ^^^^^^
[INFO] [stderr] 110 |     pub(crate) custom_type: String,
[INFO] [stderr]     |                ^^^^^^^^^^^
[INFO] [stderr] 111 |     pub(crate) user_id: String,
[INFO] [stderr] 112 |     pub(crate) client_date: std::time::Instant,
[INFO] [stderr]     |                ^^^^^^^^^^^
[INFO] [stderr] 113 |     pub(crate) value: f64,
[INFO] [stderr]     |                ^^^^^
[INFO] [stderr] 114 |     pub(crate) feature_vars: HashMap<String, String>,
[INFO] [stderr] 115 |     pub(crate) meta_data: HashMap<String, serde_json::Value>,
[INFO] [stderr]     |                ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `event` and `user` are never read
[INFO] [stderr]    --> src/events/event.rs:119:16
[INFO] [stderr]     |
[INFO] [stderr] 118 | pub(crate) struct UserEventData {
[INFO] [stderr]     |                   ------------- fields in this struct
[INFO] [stderr] 119 |     pub(crate) event: Event,
[INFO] [stderr]     |                ^^^^^
[INFO] [stderr] 120 |     pub(crate) user: User,
[INFO] [stderr]     |                ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `user` is never read
[INFO] [stderr]    --> src/events/event.rs:124:16
[INFO] [stderr]     |
[INFO] [stderr] 123 | pub(crate) struct UserEventsBatchRecord {
[INFO] [stderr]     |                   --------------------- field in this struct
[INFO] [stderr] 124 |     pub(crate) user: PopulatedUser,
[INFO] [stderr]     |                ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `event_type`, `variable_key`, `feature_id`, `variation_id`, and `eval_metadata` are never read
[INFO] [stderr]    --> src/events/event.rs:129:16
[INFO] [stderr]     |
[INFO] [stderr] 128 | pub(crate) struct AggEventQueueRawMessage {
[INFO] [stderr]     |                   ----------------------- fields in this struct
[INFO] [stderr] 129 |     pub(crate) event_type: EventType,
[INFO] [stderr]     |                ^^^^^^^^^^
[INFO] [stderr] 130 |     pub(crate) variable_key: String,
[INFO] [stderr]     |                ^^^^^^^^^^^^
[INFO] [stderr] 131 |     pub(crate) feature_id: String,
[INFO] [stderr]     |                ^^^^^^^^^^
[INFO] [stderr] 132 |     pub(crate) variation_id: String,
[INFO] [stderr]     |                ^^^^^^^^^^^^
[INFO] [stderr] 133 |     pub(crate) eval_metadata: EvalReasonAggMap,
[INFO] [stderr]     |                ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple fields are never read
[INFO] [stderr]   --> src/events/event_queue.rs:51:16
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub struct EventQueue {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 51 |     pub(crate) sdk_key: String,
[INFO] [stderr]    |                ^^^^^^^
[INFO] [stderr] 52 |     pub(crate) platform_data: Arc<PlatformData>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^
[INFO] [stderr] 53 |     pub(crate) agg_event_queue_raw_tx: mpsc::Sender<AggEventQueueRawMessage>,
[INFO] [stderr] 54 |     pub(crate) agg_event_queue_raw_rx: mpsc::Receiver<AggEventQueueRawMessage>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 55 |     pub(crate) user_event_queue_raw_tx: mpsc::Sender<UserEventData>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 56 |     pub(crate) user_event_queue_raw_rx: mpsc::Receiver<UserEventData>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 57 |     pub(crate) agg_event_queue: AggregateEventQueue,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 60 |     pub(crate) queue_access_mutex: tokio::sync::Mutex<()>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 61 |     pub(crate) events_flushed: AtomicI64,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^
[INFO] [stderr] 62 |     pub(crate) events_dropped: AtomicI64,
[INFO] [stderr] 63 |     pub(crate) events_reported: AtomicI64,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `queue_event`, `merge_agg_event_queue_keys`, `process_user_events`, `process_aggregate_event`, and `process_events` are never used
[INFO] [stderr]    --> src/events/event_queue.rs:172:18
[INFO] [stderr]     |
[INFO] [stderr]  67 | impl EventQueue {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 172 |     pub async fn queue_event(&self, user: User, event: Event) -> Result<bool, DevCycleError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 187 |     pub(crate) async fn merge_agg_event_queue_keys(&mut self, config_body: &ConfigBody) {
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 286 |     async unsafe fn process_user_events(
[INFO] [stderr]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 331 |     pub(crate) async fn process_aggregate_event(
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 380 |     pub(crate) async fn process_events(
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `has_event_queue` is never used
[INFO] [stderr]   --> src/events/event_queue_manager.rs:19:15
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub(crate) fn has_event_queue(sdk_key: &str) -> bool {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FilterType` is never used
[INFO] [stderr]   --> src/segmentation/filters.rs:10:10
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub enum FilterType {
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FilterSubType` is never used
[INFO] [stderr]   --> src/segmentation/filters.rs:21:10
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub enum FilterSubType {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: trait `FilterOrOperator` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:446:11
[INFO] [stderr]     |
[INFO] [stderr] 446 | pub trait FilterOrOperator {
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PassFilter` is never constructed
[INFO] [stderr]    --> src/segmentation/filters.rs:524:12
[INFO] [stderr]     |
[INFO] [stderr] 524 | pub struct PassFilter {}
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `evaluate` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:526:12
[INFO] [stderr]     |
[INFO] [stderr] 525 | impl PassFilter {
[INFO] [stderr]     | --------------- associated function in this implementation
[INFO] [stderr] 526 |     pub fn evaluate(
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FailFilter` is never constructed
[INFO] [stderr]    --> src/segmentation/filters.rs:535:12
[INFO] [stderr]     |
[INFO] [stderr] 535 | pub struct FailFilter {}
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `evaluate` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:537:12
[INFO] [stderr]     |
[INFO] [stderr] 536 | impl FailFilter {
[INFO] [stderr]     | --------------- associated function in this implementation
[INFO] [stderr] 537 |     pub fn evaluate(
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `AllFilter` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:546:10
[INFO] [stderr]     |
[INFO] [stderr] 546 | pub type AllFilter = PassFilter;
[INFO] [stderr]     |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `OptInFilter` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:547:10
[INFO] [stderr]     |
[INFO] [stderr] 547 | pub type OptInFilter = FailFilter;
[INFO] [stderr]     |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BaseFilter` is never constructed
[INFO] [stderr]    --> src/segmentation/filters.rs:550:12
[INFO] [stderr]     |
[INFO] [stderr] 550 | pub struct BaseFilter {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `UserFilter` is never constructed
[INFO] [stderr]    --> src/segmentation/filters.rs:557:12
[INFO] [stderr]     |
[INFO] [stderr] 557 | pub struct UserFilter {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `evaluate` and `compile` are never used
[INFO] [stderr]    --> src/segmentation/filters.rs:566:12
[INFO] [stderr]     |
[INFO] [stderr] 565 | impl UserFilter {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] 566 |     pub fn evaluate(
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 576 |     pub fn compile(&mut self) -> Result<(), String> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: trait `FilterTrait` is never used
[INFO] [stderr]    --> src/segmentation/filters.rs:647:7
[INFO] [stderr]     |
[INFO] [stderr] 647 | trait FilterTrait {
[INFO] [stderr]     |       ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Audience` is never constructed
[INFO] [stderr]   --> src/segmentation/target.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct Audience {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SemverOptions` is never constructed
[INFO] [stderr]  --> src/segmentation/versioncompare.rs:6:8
[INFO] [stderr]   |
[INFO] [stderr] 6 | struct SemverOptions {
[INFO] [stderr]   |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: trait `Compare` is never used
[INFO] [stderr]   --> src/segmentation/versioncompare.rs:11:7
[INFO] [stderr]    |
[INFO] [stderr] 11 | trait Compare {
[INFO] [stderr]    |       ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `has_valid_parts` is never used
[INFO] [stderr]   --> src/segmentation/versioncompare.rs:75:4
[INFO] [stderr]    |
[INFO] [stderr] 75 | fn has_valid_parts(lexicographical: bool, parts: &[String]) -> bool {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `user` and `feature_vars` are never read
[INFO] [stderr]   --> src/user/user.rs:70:5
[INFO] [stderr]    |
[INFO] [stderr] 69 | pub struct UserFeatureData<'a> {
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] 70 |     user: &'a User,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 71 |     feature_vars: &'a HashMap<String, String>,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `user` is never read
[INFO] [stderr]    --> src/user/user.rs:177:16
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub struct BucketedUserConfig {
[INFO] [stderr]     |            ------------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 177 |     pub(crate) user: PopulatedUser,
[INFO] [stderr]     |                ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stderr]  --> src/util/constants.rs:5:11
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub const VARIABLE_EVALUATED_EVENT: &str = "variableEvaluated";
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stderr]  --> src/util/constants.rs:6:11
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub const VARIABLE_DEFAULTED_EVENT: &str = "variableDefaulted";
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `AGG_VARIABLE_EVALUATED_EVENT` is never used
[INFO] [stderr]  --> src/util/constants.rs:7:11
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub const AGG_VARIABLE_EVALUATED_EVENT: &str = "aggVariableEvaluated";
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `AGG_VARIABLE_DEFAULTED_EVENT` is never used
[INFO] [stderr]  --> src/util/constants.rs:8:11
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub const AGG_VARIABLE_DEFAULTED_EVENT: &str = "aggVariableDefaulted";
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SUB_TYPE_IP` is never used
[INFO] [stderr]   --> src/util/constants.rs:17:11
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub const SUB_TYPE_IP: &str = "ip";
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DATA_KEY_TYPE_STRING` is never used
[INFO] [stderr]   --> src/util/constants.rs:39:11
[INFO] [stderr]    |
[INFO] [stderr] 39 | pub const DATA_KEY_TYPE_STRING: &str = "String";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DATA_KEY_TYPE_BOOLEAN` is never used
[INFO] [stderr]   --> src/util/constants.rs:40:11
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub const DATA_KEY_TYPE_BOOLEAN: &str = "Boolean";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DATA_KEY_TYPE_NUMBER` is never used
[INFO] [stderr]   --> src/util/constants.rs:41:11
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub const DATA_KEY_TYPE_NUMBER: &str = "Number";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `ROLLOUT_TYPE_PERCENTAGE` is never used
[INFO] [stderr]   --> src/util/constants.rs:49:11
[INFO] [stderr]    |
[INFO] [stderr] 49 | pub const ROLLOUT_TYPE_PERCENTAGE: &str = "percentage";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MISSING_VARIABLE` is never used
[INFO] [stderr]   --> src/util/errors.rs:39:11
[INFO] [stderr]    |
[INFO] [stderr] 39 | pub const MISSING_VARIABLE: DevCycleError = DevCycleError {
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MISSING_VARIATION` is never used
[INFO] [stderr]   --> src/util/errors.rs:42:11
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub const MISSING_VARIATION: DevCycleError = DevCycleError {
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `failed_user_does_not_qualify_for_targets` is never used
[INFO] [stderr]   --> src/util/errors.rs:51:15
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub(crate) fn failed_user_does_not_qualify_for_targets() -> DevCycleError {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `failed_user_does_not_qualify_for_rollouts` is never used
[INFO] [stderr]   --> src/util/errors.rs:55:15
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub(crate) fn failed_user_does_not_qualify_for_rollouts() -> DevCycleError {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `variable_type_mismatch` is never used
[INFO] [stderr]   --> src/util/errors.rs:83:15
[INFO] [stderr]    |
[INFO] [stderr] 83 | pub(crate) fn variable_type_mismatch() -> DevCycleError {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `failed_to_set_client_custom_data` is never used
[INFO] [stderr]   --> src/util/errors.rs:87:8
[INFO] [stderr]    |
[INFO] [stderr] 87 | pub fn failed_to_set_client_custom_data() -> DevCycleError {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_error` is never used
[INFO] [stderr]   --> src/util/errors.rs:91:8
[INFO] [stderr]    |
[INFO] [stderr] 91 | pub fn parse_error(msg: String) -> DevCycleError {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `missing_field` is never used
[INFO] [stderr]   --> src/util/errors.rs:95:8
[INFO] [stderr]    |
[INFO] [stderr] 95 | pub fn missing_field(field: String) -> DevCycleError {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] For more information about this error, try `rustc --explain E0133`.
[INFO] [stderr] warning: `devcycle-bucketing-rs` (lib) generated 114 warnings (run `cargo fix --lib -p devcycle-bucketing-rs` to apply 32 suggestions)
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:163:22
[INFO] [stderr]     |
[INFO] [stderr] 163 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:205:22
[INFO] [stderr]     |
[INFO] [stderr] 205 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:244:26
[INFO] [stderr]     |
[INFO] [stderr] 244 |             let result = unsafe {
[INFO] [stderr]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:284:26
[INFO] [stderr]     |
[INFO] [stderr] 284 |             let result = unsafe {
[INFO] [stderr]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:310:22
[INFO] [stderr]     |
[INFO] [stderr] 310 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:339:22
[INFO] [stderr]     |
[INFO] [stderr] 339 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:454:22
[INFO] [stderr]     |
[INFO] [stderr] 454 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:491:22
[INFO] [stderr]     |
[INFO] [stderr] 491 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:538:26
[INFO] [stderr]     |
[INFO] [stderr] 538 |             let result = unsafe {
[INFO] [stderr]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:574:26
[INFO] [stderr]     |
[INFO] [stderr] 574 |             let result = unsafe {
[INFO] [stderr]     |                          ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:651:27
[INFO] [stderr]     |
[INFO] [stderr] 651 |         let test_result = unsafe {
[INFO] [stderr]     |                           ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:660:27
[INFO] [stderr]     |
[INFO] [stderr] 660 |         let prod_result = unsafe {
[INFO] [stderr]     |                           ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:686:32
[INFO] [stderr]     |
[INFO] [stderr] 686 |         let bucketing_result = unsafe {
[INFO] [stderr]     |                                ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:736:22
[INFO] [stderr]     |
[INFO] [stderr] 736 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:811:22
[INFO] [stderr]     |
[INFO] [stderr] 811 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary `unsafe` block
[INFO] [stderr]    --> src/bucketing/bucketing_tests.rs:927:22
[INFO] [stderr]     |
[INFO] [stderr] 927 |         let result = unsafe {
[INFO] [stderr]     |                      ^^^^^^ unnecessary `unsafe` block
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `config_ref`
[INFO] [stderr]    --> src/events/event_queue_tests.rs:146:13
[INFO] [stderr]     |
[INFO] [stderr] 146 |         let config_ref = get_config(sdk_key).unwrap();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_config_ref`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `event_queue`
[INFO] [stderr]    --> src/events/event_queue_tests.rs:151:13
[INFO] [stderr]     |
[INFO] [stderr] 151 |         let event_queue = event_queue_manager::get_event_queue(sdk_key).unwrap();
[INFO] [stderr]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_queue`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `event_queue`
[INFO] [stderr]    --> src/events/event_queue_tests.rs:171:13
[INFO] [stderr]     |
[INFO] [stderr] 171 |         let event_queue = event_queue_manager::get_event_queue(sdk_key).unwrap();
[INFO] [stderr]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_queue`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]     --> src/segmentation/filter_tests.rs:1405:13
[INFO] [stderr]      |
[INFO] [stderr] 1405 |         let mut user = create_test_user();
[INFO] [stderr]      |             ----^^^^
[INFO] [stderr]      |             |
[INFO] [stderr]      |             help: remove this `mut`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `filter`
[INFO] [stderr]     --> src/segmentation/filter_tests.rs:1392:13
[INFO] [stderr]      |
[INFO] [stderr] 1392 |         let filter = Filter {
[INFO] [stderr]      |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `user`
[INFO] [stderr]     --> src/segmentation/filter_tests.rs:1405:13
[INFO] [stderr]      |
[INFO] [stderr] 1405 |         let mut user = create_test_user();
[INFO] [stderr]      |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `audiences`
[INFO] [stderr]     --> src/segmentation/filter_tests.rs:1406:13
[INFO] [stderr]      |
[INFO] [stderr] 1406 |         let audiences: HashMap<String, NoIdAudience> = HashMap::new();
[INFO] [stderr]      |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audiences`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `client_custom_data`
[INFO] [stderr]     --> src/segmentation/filter_tests.rs:1407:13
[INFO] [stderr]      |
[INFO] [stderr] 1407 |         let client_custom_data: HashMap<String, serde_json::Value> = HashMap::new();
[INFO] [stderr]      |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_client_custom_data`
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SSEHost` is never constructed
[INFO] [stderr]   --> src/config/config.rs:84:12
[INFO] [stderr]    |
[INFO] [stderr] 84 | pub struct SSEHost {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `platform_data`, `agg_event_queue_raw_rx`, `agg_event_queue`, and `queue_access_mutex` are never read
[INFO] [stderr]   --> src/events/event_queue.rs:52:16
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub struct EventQueue {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 51 |     pub(crate) sdk_key: String,
[INFO] [stderr] 52 |     pub(crate) platform_data: Arc<PlatformData>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^
[INFO] [stderr] 53 |     pub(crate) agg_event_queue_raw_tx: mpsc::Sender<AggEventQueueRawMessage>,
[INFO] [stderr] 54 |     pub(crate) agg_event_queue_raw_rx: mpsc::Receiver<AggEventQueueRawMessage>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub(crate) agg_event_queue: AggregateEventQueue,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 60 |     pub(crate) queue_access_mutex: tokio::sync::Mutex<()>,
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `merge_agg_event_queue_keys`, `process_user_events`, `process_aggregate_event`, and `process_events` are never used
[INFO] [stderr]    --> src/events/event_queue.rs:187:25
[INFO] [stderr]     |
[INFO] [stderr]  67 | impl EventQueue {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 187 |     pub(crate) async fn merge_agg_event_queue_keys(&mut self, config_body: &ConfigBody) {
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 286 |     async unsafe fn process_user_events(
[INFO] [stderr]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 331 |     pub(crate) async fn process_aggregate_event(
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 380 |     pub(crate) async fn process_events(
[INFO] [stderr]     |                         ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `devcycle-bucketing-rs` (lib test) generated 133 warnings (106 duplicates) (run `cargo fix --lib -p devcycle-bucketing-rs --tests` to apply 8 suggestions)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.31s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/devcycle-bucketing-rs/b93e2ab58d5dfa14/out/devcycle_bucketing_rs-b93e2ab58d5dfa14)
[INFO] [stdout] running 173 tests
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_evaluation_reasons_are_set ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_config_loading_and_structure ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_multiple_users ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_missing_sdk_key ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_with_private_custom_data ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_with_custom_data ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_evaluation_details_serialization ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_config_with_targeting_data ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_config_multiple_user_scenarios ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_basic_user ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_vs_test_config_consistency ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_user_creation_and_data_merging ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_variable_for_user ... ok
[INFO] [stdout] test config::config_tests::tests::test_bucketing_config_with_partial_fields ... ok
[INFO] [stdout] test config::config_tests::tests::test_invalid_json_handling ... ok
[INFO] [stdout] test config::config_tests::tests::test_missing_required_fields ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_different_countries ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_config_body ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_environment_with_extra_fields ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_hardcoded_config_from_resources ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_config_stress_test ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_complex_project_config ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_environment_json ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_config_basic_bucketing ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_bucketing_configuration_json ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user ... FAILED
[INFO] [stdout] test config::config_tests::tests::test_parse_project_with_field_aliases ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_real_world_config ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_sse_json ... ok
[INFO] [stdout] test bucketing::bucketing_tests::tests::test_production_config_structure_validation ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_project_json ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_variable_json ... ok
[INFO] [stdout] test config::config_tests::tests::test_round_trip_serialization ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_variable_json_with_different_types ... ok
[INFO] [stdout] test config::config_tests::tests::test_serialize_and_deserialize_project ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_variables_array ... ok
[INFO] [stdout] test config::config_tests::tests::test_sse_config_serialization ... ok
[INFO] [stdout] test config::config_tests::tests::test_pretty_json_output ... ok
[INFO] [stdout] test config::config_tests::tests::test_variable_types_from_real_config ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_arc_cloning_efficiency ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_get_nonexistent_config ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_has_config ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_memory_safety_with_arc ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_concurrent_reads ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_concurrent_different_keys ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_config_immutability_across_threads ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_set_and_get_config ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_concurrent_has_config_checks ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_update_config ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_generate_creates_valid_platform_data ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_get_platform_data_per_sdk_key ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_concurrent_reads_and_writes ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_get_platform_data_returns_error_when_not_set ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_get_platform_data_returns_same_arc_for_same_sdk_key ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_platform_data_serialization ... ok
[INFO] [stdout] test config::platform_data_tests::tests::test_platform_data_concurrent_access ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_add_to_user_queue ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_creation ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_disabled_logging ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_empty_variable_key_error ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_stress_concurrent_operations ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_flush_events ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_merge_agg_event_queue_keys ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_process_aggregate_event ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_process_user_event ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_options_default ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_user_max_queue_drop ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_variable_defaulted ... ok
[INFO] [stdout] test events::event_tests::tests::test_default_reason_display ... ok
[INFO] [stdout] test events::event_tests::tests::test_default_reason_format ... ok
[INFO] [stdout] test events::event_tests::tests::test_evaluation_reason_display ... ok
[INFO] [stdout] test events::event_tests::tests::test_evaluation_reason_format ... ok
[INFO] [stdout] test ffi::ffi_tests::test_init_and_queue_event ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_all_filter_always_passes ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_no_deadlock_scenario ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_and_operator_fails_when_one_filter_fails ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_country_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_bool_equal_true ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_and_operator ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_bool_not_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_contains ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_exist_empty_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_exist_without_field ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_not_contains ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_not_equal_no_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_not_exist_no_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_not_exist_with_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_number_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_exist_with_value ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_number_not_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_number_or_values ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_equal_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_empty_string ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_multiple_configs ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_equal_no_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_equal_or_values ... ok
[INFO] [stdout] test config::config_tests::tests::test_parse_production_config_from_cdn ... FAILED
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_not_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_not_equal_multiple ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_with_client_custom_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_does_user_pass_filter_with_user_country_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_does_user_pass_filter_with_user_email_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_does_user_pass_filter_with_user_platform_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_custom_data_string_key_not_present ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_and_custom_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_and_custom_data_prioritize_user_data ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_email_filter_contains ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_audience_filter_for_platforms ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_empty_filters_pass ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_audience_nested ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_fail_empty ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_invalid_comparator ... ok
[INFO] [stdout] test config::configmanager_tests::tests::test_sequential_updates_with_concurrent_reads ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_opt_in ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_unknown_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_pass_all ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_nested_or ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_nested_and ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_user_new_comparator ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_user_sub_filter_invalid ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_nested_filters ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_audience_filter_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_numeric_comparison_filters ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_user_filters_and ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_or_operator ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_contain_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_contain_partial_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_contain_no_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_optin_filter_always_fails ... ok
[INFO] [stdout] test config::config_tests::tests::test_production_config_error_handling ... FAILED
[INFO] [stdout] test segmentation::filter_tests::tests::test_platform_filter ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_equal_empty_no_values ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_equal_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_equal_match_in_list ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_equal_no_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_exist_empty ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_exist_not_empty ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_contain_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_contain_no_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_contain_partial_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_equal_match_in_list ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_exist_empty ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_exist_not_empty ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_user_id_filter_contain ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_user_id_filter_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_user_id_filter_not_equal ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_equal_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_string_filter_not_equal_no_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_equal_array_any_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_equal_array_no_match ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_equal_single_values ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_evaluate_operator_user_filters_or ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_equal_array ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_than_array ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_than_or_equal_false ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_equal_array ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_than_array ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_than_true ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_than_or_equal_true ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_not_equal_array ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_not_equal_comparator_false ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_greater_than_false ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_than_or_equal_false ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_than_true ... ok
[INFO] [stdout] test util::murmurhash_tests::tests::test_hash_expected_result ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_not_equal_comparator_true ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_than_or_equal_true ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_not_equal_single_values ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_less_than_false ... ok
[INFO] [stdout] test segmentation::filter_tests::tests::test_version_with_extra_characters ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_add_to_agg_queue ... ok
[INFO] [stdout] test events::event_queue_tests::tests::test_event_queue_queue_and_flush ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user' (2563) panicked at src/bucketing/bucketing_tests.rs:714:9:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: 2
[INFO] [stdout]  right: 3
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63fe2556d877 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x63fe2539b5d4 - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x63fe2556ce3b - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x63fe2556ca39 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x63fe2556c6ba - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x63fe2556c1eb - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    6:     0x63fe25592071 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    7:     0x63fe25592029 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    8:     0x63fe2559251c - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]    9:     0x63fe2539b46b - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   10:     0x63fe2539b383 - core[a373ad73a504971]::panicking::assert_failed_inner
[INFO] [stdout]   11:     0x63fe2539c63c - core[a373ad73a504971]::panicking::assert_failed::<usize, usize>
[INFO] [stdout]   12:     0x63fe2540a137 - devcycle_bucketing_rs[375f0c2341bc38c0]::bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user::{closure#0}
[INFO] [stdout]   13:     0x63fe25450d2d - <tokio[e385c699bce427f9]::runtime::runtime::Runtime>::block_on::<core[a373ad73a504971]::pin::Pin<&mut dyn core[a373ad73a504971]::future::future::Future<Output = ()>>>
[INFO] [stdout]   14:     0x63fe254092f5 - <devcycle_bucketing_rs[375f0c2341bc38c0]::bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   15:     0x63fe255ababb - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   16:     0x63fe255a7742 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   17:     0x63fe255a71ec - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   18:     0x63fe255c391c - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   19:     0x63fe25593fa8 - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   20:     0x7965303cedfa - <unknown>
[INFO] [stdout]   21:     0x7965304623d4 - clone
[INFO] [stdout]   22:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- config::config_tests::tests::test_parse_production_config_from_cdn stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'config::config_tests::tests::test_parse_production_config_from_cdn' (2583) panicked at src/config/config_tests.rs:518:14:
[INFO] [stdout] Failed to fetch config from CDN: reqwest::Error { kind: Request, url: "https://config-cdn.devcycle.com/config/v2/server/dvc_server_token_hash.json", source: hyper_util::client::legacy::Error(Connect, ConnectError("dns error", Custom { kind: Uncategorized, error: "failed to lookup address information: Temporary failure in name resolution" })) }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63fe2556d877 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x63fe2539b5d4 - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x63fe2556ce3b - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x63fe2556ca39 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x63fe2556c6ba - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x63fe2556c1eb - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    6:     0x63fe25592071 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    7:     0x63fe25592029 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    8:     0x63fe2559251c - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]    9:     0x63fe2539b46b - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   10:     0x63fe253a0021 - core[a373ad73a504971]::result::unwrap_failed
[INFO] [stdout]   11:     0x63fe2543f4a9 - devcycle_bucketing_rs[375f0c2341bc38c0]::config::config_tests::tests::test_parse_production_config_from_cdn::{closure#0}
[INFO] [stdout]   12:     0x63fe25450d2d - <tokio[e385c699bce427f9]::runtime::runtime::Runtime>::block_on::<core[a373ad73a504971]::pin::Pin<&mut dyn core[a373ad73a504971]::future::future::Future<Output = ()>>>
[INFO] [stdout]   13:     0x63fe2543d051 - <devcycle_bucketing_rs[375f0c2341bc38c0]::config::config_tests::tests::test_parse_production_config_from_cdn::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   14:     0x63fe255ababb - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   15:     0x63fe255a7742 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   16:     0x63fe255a71ec - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   17:     0x63fe255c391c - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   18:     0x63fe25593fa8 - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   19:     0x7965303cedfa - <unknown>
[INFO] [stdout]   20:     0x7965304623d4 - clone
[INFO] [stdout]   21:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- config::config_tests::tests::test_production_config_error_handling stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'config::config_tests::tests::test_production_config_error_handling' (2592) panicked at src/config/config_tests.rs:644:14:
[INFO] [stdout] Failed to make HTTP request: reqwest::Error { kind: Request, url: "https://config-cdn.devcycle.com/config/v2/server/nonexistent.json", source: hyper_util::client::legacy::Error(Connect, ConnectError("dns error", Custom { kind: Uncategorized, error: "failed to lookup address information: Temporary failure in name resolution" })) }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x63fe2556d877 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x63fe2539b5d4 - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x63fe2556ce3b - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x63fe2556ca39 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x63fe2556c6ba - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x63fe2556c1eb - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    6:     0x63fe25592071 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    7:     0x63fe25592029 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    8:     0x63fe2559251c - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]    9:     0x63fe2539b46b - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   10:     0x63fe253a0021 - core[a373ad73a504971]::result::unwrap_failed
[INFO] [stdout]   11:     0x63fe254420f9 - devcycle_bucketing_rs[375f0c2341bc38c0]::config::config_tests::tests::test_production_config_error_handling::{closure#0}
[INFO] [stdout]   12:     0x63fe25450d2d - <tokio[e385c699bce427f9]::runtime::runtime::Runtime>::block_on::<core[a373ad73a504971]::pin::Pin<&mut dyn core[a373ad73a504971]::future::future::Future<Output = ()>>>
[INFO] [stdout]   13:     0x63fe25441e5d - <devcycle_bucketing_rs[375f0c2341bc38c0]::config::config_tests::tests::test_production_config_error_handling::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   14:     0x63fe255ababb - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   15:     0x63fe255a7742 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   16:     0x63fe255a71ec - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   17:     0x63fe255c391c - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   18:     0x63fe25593fa8 - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   19:     0x7965303cedfa - <unknown>
[INFO] [stdout]   20:     0x7965304623d4 - clone
[INFO] [stdout]   21:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     bucketing::bucketing_tests::tests::test_generate_bucketed_config_v2_user
[INFO] [stdout]     config::config_tests::tests::test_parse_production_config_from_cdn
[INFO] [stdout]     config::config_tests::tests::test_production_config_error_handling
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 170 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4", kill_on_drop: false }`
[INFO] [stdout] dbd87a26e4c0dd15f8f137d5f71a0ccf04eb7df65d0a713c0e95edd5f67a94d4
