[INFO] fetching crate devcycle-bucketing-rs 0.2.3... [INFO] linting devcycle-bucketing-rs-0.2.3 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate devcycle-bucketing-rs 0.2.3 into /workspace/builds/worker-1-tc1/source [INFO] removed /workspace/builds/worker-1-tc1/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-1-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate devcycle-bucketing-rs 0.2.3 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "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" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded murmur3 v0.5.2 [INFO] [stderr] Downloaded clap v4.5.52 [INFO] [stderr] Downloaded clap_builder v4.5.52 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 1cf3244f98c25f6ddb7d73c33be11f17733d290951fb515111d629fca922d4ef [INFO] running `Command { std: "docker" "start" "-a" "1cf3244f98c25f6ddb7d73c33be11f17733d290951fb515111d629fca922d4ef", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1cf3244f98c25f6ddb7d73c33be11f17733d290951fb515111d629fca922d4ef", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1cf3244f98c25f6ddb7d73c33be11f17733d290951fb515111d629fca922d4ef", kill_on_drop: false }` [INFO] [stdout] 1cf3244f98c25f6ddb7d73c33be11f17733d290951fb515111d629fca922d4ef [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 2afb4c00c9e936d060352827c99eedad3510993bc16d78ccec79a13542df889f [INFO] running `Command { std: "docker" "start" "-a" "2afb4c00c9e936d060352827c99eedad3510993bc16d78ccec79a13542df889f", kill_on_drop: false }` [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling cc v1.2.46 [INFO] [stderr] Checking http v1.3.1 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking hashbrown v0.16.0 [INFO] [stderr] Compiling syn v2.0.110 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking socket2 v0.6.1 [INFO] [stderr] Checking mio v1.1.0 [INFO] [stderr] Checking signal-hook-registry v1.4.6 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking log v0.4.28 [INFO] [stderr] Checking clap_builder v4.5.52 [INFO] [stderr] Checking itertools v0.10.5 [INFO] [stderr] Checking futures-io v0.3.31 [INFO] [stderr] Checking rustls-pki-types v1.13.0 [INFO] [stderr] Checking plotters v0.3.7 [INFO] [stderr] Checking hostname v0.4.1 [INFO] [stderr] Checking is-terminal v0.4.17 [INFO] [stderr] Checking murmur3 v0.5.2 [INFO] [stderr] Checking semver v1.0.27 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking indexmap v2.12.0 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking clap v4.5.52 [INFO] [stderr] Checking criterion-plot v0.5.0 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling native-tls v0.2.14 [INFO] [stderr] Checking serde_json v1.0.145 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Compiling synstructure v0.13.2 [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 displaydoc v0.2.5 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling zerocopy-derive v0.8.27 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Checking tokio v1.48.0 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking zerocopy v0.8.27 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.1 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking chrono v0.4.42 [INFO] [stderr] Checking tinytemplate v1.2.1 [INFO] [stderr] Checking half v2.7.1 [INFO] [stderr] Checking ciborium-ll v0.2.2 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking ciborium v0.2.2 [INFO] [stderr] Checking url v2.5.7 [INFO] [stderr] Checking tokio-util v0.7.17 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking criterion v0.5.1 [INFO] [stderr] Checking 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 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] [stderr] Checking tower-http v0.6.6 [INFO] [stderr] Checking h2 v0.4.12 [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 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: for more information, see [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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, [INFO] [stdout] 115 | pub(crate) meta_data: HashMap, [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, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 53 | pub(crate) agg_event_queue_raw_tx: mpsc::Sender, [INFO] [stdout] 54 | pub(crate) agg_event_queue_raw_rx: mpsc::Receiver, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 55 | pub(crate) user_event_queue_raw_tx: mpsc::Sender, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 56 | pub(crate) user_event_queue_raw_rx: mpsc::Receiver, [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 { [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, [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] warning: module has the same name as its containing module [INFO] [stdout] --> src/bucketing/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | pub(crate) mod bucketing; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/bucketing/bucketing.rs:227:8 [INFO] [stdout] | [INFO] [stdout] 227 | if target_bucketing_key == "" || target_bucketing_key == "user_id" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `target_bucketing_key.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:315:9 [INFO] [stdout] | [INFO] [stdout] 315 | / return (*current_stage).percentage [INFO] [stdout] 316 | | + (current_date_percentage * ((*next_stage).percentage - (*current_stage).percentage)); [INFO] [stdout] | |__________________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 315 ~ (*current_stage).percentage [INFO] [stdout] 316 ~ + (current_date_percentage * ((*next_stage).percentage - (*current_stage).percentage)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/bucketing/bucketing.rs:274:5 [INFO] [stdout] | [INFO] [stdout] 274 | let _current_stage: *mut RolloutStage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `_current_stage` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 274 ~ [INFO] [stdout] 275 | let next_stage: *mut RolloutStage; [INFO] [stdout] 276 ~ let _current_stage: *mut RolloutStage = if current_stages.len() == 0 { [INFO] [stdout] 277 ~ null_mut() [INFO] [stdout] 278 | } else { [INFO] [stdout] 279 | let current_stages_len = current_stages.len(); [INFO] [stdout] 280 ~ &mut current_stages[current_stages_len - 1] [INFO] [stdout] 281 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/bucketing/bucketing.rs:275:5 [INFO] [stdout] | [INFO] [stdout] 275 | let next_stage: *mut RolloutStage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] help: move the declaration `next_stage` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 275 ~ [INFO] [stdout] 276 | if current_stages.len() == 0 { [INFO] [stdout] ... [INFO] [stdout] 282 | [INFO] [stdout] 283 ~ let next_stage: *mut RolloutStage = if next_stages.len() == 0 { [INFO] [stdout] 284 ~ null_mut() [INFO] [stdout] 285 | } else { [INFO] [stdout] 286 ~ &mut next_stages[0] [INFO] [stdout] 287 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bucketing/bucketing.rs:276:8 [INFO] [stdout] | [INFO] [stdout] 276 | if current_stages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `current_stages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bucketing/bucketing.rs:283:8 [INFO] [stdout] | [INFO] [stdout] 283 | if next_stages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_stages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:290:8 [INFO] [stdout] | [INFO] [stdout] 290 | if _current_stage == null_mut() && rollout_start_date.lt(¤t_date_time) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `_current_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] = note: `#[warn(clippy::cmp_null)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:297:8 [INFO] [stdout] | [INFO] [stdout] 297 | if current_stage == null_mut() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `current_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:301:12 [INFO] [stdout] | [INFO] [stdout] 301 | if next_stage == null_mut() || (*next_stage)._type == constants::ROLLOUT_TYPE_DISCRETE { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `next_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:324:13 [INFO] [stdout] | [INFO] [stdout] 324 | return current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 324 - return current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage; [INFO] [stdout] 324 + current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:363:5 [INFO] [stdout] | [INFO] [stdout] 363 | return ret; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 363 - return ret; [INFO] [stdout] 363 + ret [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/bucketing/bucketing.rs:359:39 [INFO] [stdout] | [INFO] [stdout] 359 | ret = Ok((target.clone(), is_rollout.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `is_rollout` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:368:5 [INFO] [stdout] | [INFO] [stdout] 368 | return rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 368 - return rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage); [INFO] [stdout] 368 + rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:379:8 [INFO] [stdout] | [INFO] [stdout] 379 | if !target_pair.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_pair.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:410:8 [INFO] [stdout] | [INFO] [stdout] 410 | if !target_variation_result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `target_variation_result.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:447:12 [INFO] [stdout] | [INFO] [stdout] 447 | if !target_hash.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_hash.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:453:12 [INFO] [stdout] | [INFO] [stdout] 453 | if !variation.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `variation.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/config/client_custom_data.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | return values.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return values.unwrap(); [INFO] [stdout] 12 + values.unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/config/mod.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub(crate) mod config; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SSE` contains a capitalized acronym [INFO] [stdout] --> src/config/config.rs:78:12 [INFO] [stdout] | [INFO] [stdout] 78 | pub struct SSE { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Sse` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/config/feature.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | / for variable in &self.variables { [INFO] [stdout] 40 | | if variable._var == id { [INFO] [stdout] 41 | | return Some(variable); [INFO] [stdout] ... | [INFO] [stdout] 44 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `self.variables.iter().find(|&variable| variable._var == id).map(|v| v as _)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | return self.disable_automatic_event_logging; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 31 - return self.disable_automatic_event_logging; [INFO] [stdout] 31 + self.disable_automatic_event_logging [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `success` after checking its variant with `is_err` [INFO] [stdout] --> src/events/event_queue.rs:166:17 [INFO] [stdout] | [INFO] [stdout] 162 | if success.is_err() { [INFO] [stdout] | ------------------- help: try: `if let Err() = success` [INFO] [stdout] ... [INFO] [stdout] 166 | success.unwrap_err() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 169 - return Ok(true); [INFO] [stdout] 169 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `success` after checking its variant with `is_err` [INFO] [stdout] --> src/events/event_queue.rs:181:17 [INFO] [stdout] | [INFO] [stdout] 177 | if success.is_err() { [INFO] [stdout] | ------------------- help: try: `if let Err() = success` [INFO] [stdout] ... [INFO] [stdout] 181 | success.unwrap_err() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:184:9 [INFO] [stdout] | [INFO] [stdout] 184 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 184 - return Ok(true); [INFO] [stdout] 184 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:328:9 [INFO] [stdout] | [INFO] [stdout] 328 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 328 - return Ok(true); [INFO] [stdout] 328 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:354:18 [INFO] [stdout] | [INFO] [stdout] 354 | .or_insert_with(HashMap::new); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:352:18 [INFO] [stdout] | [INFO] [stdout] 352 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:350:18 [INFO] [stdout] | [INFO] [stdout] 350 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:348:18 [INFO] [stdout] | [INFO] [stdout] 348 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:372:18 [INFO] [stdout] | [INFO] [stdout] 372 | .or_insert_with(HashMap::new); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:370:18 [INFO] [stdout] | [INFO] [stdout] 370 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:368:18 [INFO] [stdout] | [INFO] [stdout] 368 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:366:18 [INFO] [stdout] | [INFO] [stdout] 366 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:223:9 [INFO] [stdout] | [INFO] [stdout] 223 | / if is_version_field { [INFO] [stdout] 224 | | if let serde_json::Value::String(user_str) = user_value { [INFO] [stdout] 225 | | return self.compare_version_strings(user_str, comparator); [INFO] [stdout] 226 | | } [INFO] [stdout] 227 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 223 ~ if is_version_field [INFO] [stdout] 224 ~ && let serde_json::Value::String(user_str) = user_value { [INFO] [stdout] 225 | return self.compare_version_strings(user_str, comparator); [INFO] [stdout] 226 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:241:17 [INFO] [stdout] | [INFO] [stdout] 241 | / if let ( [INFO] [stdout] 242 | | serde_json::Value::String(user_str), [INFO] [stdout] 243 | | serde_json::Value::String(filter_str), [INFO] [stdout] 244 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 249 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 244 ~ ) = (user_value, filter_value) [INFO] [stdout] 245 ~ && !filter_str.is_empty() && user_str.contains(filter_str) { [INFO] [stdout] 246 | return false; // If it contains any value, fail [INFO] [stdout] 247 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:256:17 [INFO] [stdout] | [INFO] [stdout] 256 | / if let ( [INFO] [stdout] 257 | | serde_json::Value::String(user_str), [INFO] [stdout] 258 | | serde_json::Value::String(filter_str), [INFO] [stdout] 259 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 264 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 259 ~ ) = (user_value, filter_value) [INFO] [stdout] 260 ~ && !filter_str.is_empty() && user_str.starts_with(filter_str) { [INFO] [stdout] 261 | return false; // If it starts with any value, fail [INFO] [stdout] 262 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:271:17 [INFO] [stdout] | [INFO] [stdout] 271 | / if let ( [INFO] [stdout] 272 | | serde_json::Value::String(user_str), [INFO] [stdout] 273 | | serde_json::Value::String(filter_str), [INFO] [stdout] 274 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 279 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 274 ~ ) = (user_value, filter_value) [INFO] [stdout] 275 ~ && !filter_str.is_empty() && user_str.ends_with(filter_str) { [INFO] [stdout] 276 | return false; // If it ends with any value, fail [INFO] [stdout] 277 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:388:13 [INFO] [stdout] | [INFO] [stdout] 388 | / if let Some(audience) = audiences.get(audience_id) { [INFO] [stdout] 389 | | if audience [INFO] [stdout] 390 | | .filters [INFO] [stdout] 391 | | .evaluate(audiences, user, client_custom_data) [INFO] [stdout] ... | [INFO] [stdout] 396 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 388 ~ if let Some(audience) = audiences.get(audience_id) [INFO] [stdout] 389 ~ && audience [INFO] [stdout] 390 | .filters [INFO] [stdout] ... [INFO] [stdout] 394 | break; [INFO] [stdout] 395 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `self.values.get(0)` [INFO] [stdout] --> src/segmentation/filters.rs:580:27 [INFO] [stdout] | [INFO] [stdout] 580 | let first_value = self.values.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `self.values.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `v1_parts` [INFO] [stdout] --> src/segmentation/filters.rs:728:18 [INFO] [stdout] | [INFO] [stdout] 728 | for i in min_len..v1_parts.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 728 - for i in min_len..v1_parts.len() { [INFO] [stdout] 728 + for in v1_parts.iter().skip(min_len) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `v2_parts` [INFO] [stdout] --> src/segmentation/filters.rs:735:18 [INFO] [stdout] | [INFO] [stdout] 735 | for i in min_len..v2_parts.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 735 - for i in min_len..v2_parts.len() { [INFO] [stdout] 735 + for in v2_parts.iter().skip(min_len) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:794:13 [INFO] [stdout] | [INFO] [stdout] 794 | / if v1_has_suffix && v2_has_suffix { [INFO] [stdout] 795 | | if v1_suffix != v2_suffix { [INFO] [stdout] 796 | | return false; [INFO] [stdout] 797 | | } [INFO] [stdout] 798 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 794 ~ if v1_has_suffix && v2_has_suffix [INFO] [stdout] 795 ~ && v1_suffix != v2_suffix { [INFO] [stdout] 796 | return false; [INFO] [stdout] 797 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/segmentation/target.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | return Err(FAILED_TO_DECIDE_VARIATION); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 37 - return Err(FAILED_TO_DECIDE_VARIATION); [INFO] [stdout] 37 + Err(FAILED_TO_DECIDE_VARIATION) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/user/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | pub mod user; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `DateTime` which implements the `Copy` trait [INFO] [stdout] --> src/user/user.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | last_seen_date: self.last_seen_date.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.last_seen_date` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/user/user.rs:163:9 [INFO] [stdout] | [INFO] [stdout] 163 | return popuser; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 163 - return popuser; [INFO] [stdout] 163 + popuser [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `DateTime` which implements the `Copy` trait [INFO] [stdout] --> src/user/user.rs:151:29 [INFO] [stdout] | [INFO] [stdout] 151 | last_seen_date: user.last_seen_date.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `user.last_seen_date` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/util/constants.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod constants {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/errors.rs:116:5 [INFO] [stdout] | [INFO] [stdout] 116 | return DevCycleError::new("Event queue not initialized"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 116 - return DevCycleError::new("Event queue not initialized"); [INFO] [stdout] 116 + DevCycleError::new("Event queue not initialized") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/util/murmurhash.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub(crate) mod murmurhash { [INFO] [stdout] 2 | | use crate::constants; [INFO] [stdout] 3 | | use murmur3::murmur3_32; [INFO] [stdout] 4 | | use serde::{Deserialize, Serialize}; [INFO] [stdout] ... | [INFO] [stdout] 35 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/murmurhash.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | return murmur3_32(&mut cursor, seed).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 8 - return murmur3_32(&mut cursor, seed).unwrap(); [INFO] [stdout] 8 + murmur3_32(&mut cursor, seed).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/murmurhash.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | return f64::from(hash) / f64::from(constants::MAX_HASH_VALUE); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return f64::from(hash) / f64::from(constants::MAX_HASH_VALUE); [INFO] [stdout] 12 + f64::from(hash) / f64::from(constants::MAX_HASH_VALUE) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/ffi.rs:13:50 [INFO] [stdout] | [INFO] [stdout] 13 | static LAST_ERROR: RefCell> = RefCell::new(None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(None) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] = note: `#[warn(clippy::missing_const_for_thread_local)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/ffi.rs:41:61 [INFO] [stdout] | [INFO] [stdout] 41 | static LAST_ERROR_CODE: RefCell = RefCell::new(DevCycleFFIErrorCode::Success); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(DevCycleFFIErrorCode::Success) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:65:1 [INFO] [stdout] | [INFO] [stdout] 65 | pub unsafe extern "C" fn devcycle_get_last_error() -> *mut c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] = note: `#[warn(clippy::missing_safety_doc)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:76:1 [INFO] [stdout] | [INFO] [stdout] 76 | pub unsafe extern "C" fn devcycle_get_last_error_code() -> DevCycleFFIErrorCode { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:81:1 [INFO] [stdout] | [INFO] [stdout] 81 | pub unsafe extern "C" fn devcycle_error_code_to_string(code: DevCycleFFIErrorCode) -> *mut c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: passing a unit value to a function [INFO] [stdout] --> src/lib.rs:58:5 [INFO] [stdout] | [INFO] [stdout] 58 | Ok(configmanager::set_config(sdk_key, config_body)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stdout] = note: `#[warn(clippy::unit_arg)]` on by default [INFO] [stdout] help: move the expression in front of the call and replace it with the unit literal `()` [INFO] [stdout] | [INFO] [stdout] 58 ~ configmanager::set_config(sdk_key, config_body); [INFO] [stdout] 59 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] For more information about this error, try `rustc --explain E0133`. [INFO] [stdout] [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking hyper-util v0.1.18 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.24 [INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used [INFO] [stdout] --> src/bucketing/bucketing_benches.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 74 | setup_platform_data(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: futures do nothing unless you `.await` or poll them [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used [INFO] [stdout] --> src/bucketing/bucketing_benches.rs:134:5 [INFO] [stdout] | [INFO] [stdout] 134 | setup_platform_data(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: futures do nothing unless you `.await` or poll them [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used [INFO] [stdout] --> src/bucketing/bucketing_benches.rs:248:5 [INFO] [stdout] | [INFO] [stdout] 248 | setup_platform_data(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: futures do nothing unless you `.await` or poll them [INFO] [stdout] [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 for more information about checking conditional configuration [INFO] [stdout] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/bucketing/bucketing_tests.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use serde_json; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` 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: this import is redundant [INFO] [stdout] --> src/config/config_tests.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use serde_json; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [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: 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 = 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 = 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 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: for more information, see [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning[E0133]: call to unsafe function `std::boxed::Box::::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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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, [INFO] [stdout] 115 | pub(crate) meta_data: HashMap, [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, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 53 | pub(crate) agg_event_queue_raw_tx: mpsc::Sender, [INFO] [stdout] 54 | pub(crate) agg_event_queue_raw_rx: mpsc::Receiver, [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, [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] warning: module has the same name as its containing module [INFO] [stdout] --> src/bucketing/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | pub(crate) mod bucketing; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/bucketing/bucketing.rs:227:8 [INFO] [stdout] | [INFO] [stdout] 227 | if target_bucketing_key == "" || target_bucketing_key == "user_id" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `target_bucketing_key.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:315:9 [INFO] [stdout] | [INFO] [stdout] 315 | / return (*current_stage).percentage [INFO] [stdout] 316 | | + (current_date_percentage * ((*next_stage).percentage - (*current_stage).percentage)); [INFO] [stdout] | |__________________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 315 ~ (*current_stage).percentage [INFO] [stdout] 316 ~ + (current_date_percentage * ((*next_stage).percentage - (*current_stage).percentage)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/bucketing/bucketing.rs:274:5 [INFO] [stdout] | [INFO] [stdout] 274 | let _current_stage: *mut RolloutStage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `_current_stage` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 274 ~ [INFO] [stdout] 275 | let next_stage: *mut RolloutStage; [INFO] [stdout] 276 ~ let _current_stage: *mut RolloutStage = if current_stages.len() == 0 { [INFO] [stdout] 277 ~ null_mut() [INFO] [stdout] 278 | } else { [INFO] [stdout] 279 | let current_stages_len = current_stages.len(); [INFO] [stdout] 280 ~ &mut current_stages[current_stages_len - 1] [INFO] [stdout] 281 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/bucketing/bucketing.rs:275:5 [INFO] [stdout] | [INFO] [stdout] 275 | let next_stage: *mut RolloutStage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] help: move the declaration `next_stage` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 275 ~ [INFO] [stdout] 276 | if current_stages.len() == 0 { [INFO] [stdout] ... [INFO] [stdout] 282 | [INFO] [stdout] 283 ~ let next_stage: *mut RolloutStage = if next_stages.len() == 0 { [INFO] [stdout] 284 ~ null_mut() [INFO] [stdout] 285 | } else { [INFO] [stdout] 286 ~ &mut next_stages[0] [INFO] [stdout] 287 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bucketing/bucketing.rs:276:8 [INFO] [stdout] | [INFO] [stdout] 276 | if current_stages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `current_stages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bucketing/bucketing.rs:283:8 [INFO] [stdout] | [INFO] [stdout] 283 | if next_stages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_stages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:290:8 [INFO] [stdout] | [INFO] [stdout] 290 | if _current_stage == null_mut() && rollout_start_date.lt(¤t_date_time) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `_current_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] = note: `#[warn(clippy::cmp_null)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:297:8 [INFO] [stdout] | [INFO] [stdout] 297 | if current_stage == null_mut() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `current_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparing with null is better expressed by the `.is_null()` method [INFO] [stdout] --> src/bucketing/bucketing.rs:301:12 [INFO] [stdout] | [INFO] [stdout] 301 | if next_stage == null_mut() || (*next_stage)._type == constants::ROLLOUT_TYPE_DISCRETE { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `next_stage.is_null()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_null [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:324:13 [INFO] [stdout] | [INFO] [stdout] 324 | return current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 324 - return current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage; [INFO] [stdout] 324 + current_rollout_percentage != 0.0 && bounded_hash <= current_rollout_percentage [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:363:5 [INFO] [stdout] | [INFO] [stdout] 363 | return ret; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 363 - return ret; [INFO] [stdout] 363 + ret [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/bucketing/bucketing.rs:359:39 [INFO] [stdout] | [INFO] [stdout] 359 | ret = Ok((target.clone(), is_rollout.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `is_rollout` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing.rs:368:5 [INFO] [stdout] | [INFO] [stdout] 368 | return rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 368 - return rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage); [INFO] [stdout] 368 + rollout_percentage != 0.0 && (bounded_hash <= rollout_percentage) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:379:8 [INFO] [stdout] | [INFO] [stdout] 379 | if !target_pair.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_pair.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:410:8 [INFO] [stdout] | [INFO] [stdout] 410 | if !target_variation_result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `target_variation_result.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:447:12 [INFO] [stdout] | [INFO] [stdout] 447 | if !target_hash.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_hash.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bucketing/bucketing.rs:453:12 [INFO] [stdout] | [INFO] [stdout] 453 | if !variation.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `variation.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bucketing/bucketing_tests.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | return config; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 91 - return config; [INFO] [stdout] 91 + config [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/bucketing/bucketing_tests.rs:585:39 [INFO] [stdout] | [INFO] [stdout] 583 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] 584 | successful_buckets += 1; [INFO] [stdout] 585 | let bucketed_config = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bucketing/bucketing_tests.rs:978:9 [INFO] [stdout] | [INFO] [stdout] 978 | / assert_eq!( [INFO] [stdout] 979 | | resp.eval_reason.is_ok(), [INFO] [stdout] 980 | | true, [INFO] [stdout] 981 | | "eval_details should be empty on success" [INFO] [stdout] 982 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 978 ~ assert!( [INFO] [stdout] 979 ~ resp.eval_reason.is_ok(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/config/client_custom_data.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | return values.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return values.unwrap(); [INFO] [stdout] 12 + values.unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/config/mod.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub(crate) mod config; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SSE` contains a capitalized acronym [INFO] [stdout] --> src/config/config.rs:78:12 [INFO] [stdout] | [INFO] [stdout] 78 | pub struct SSE { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Sse` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/config/feature.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | / for variable in &self.variables { [INFO] [stdout] 40 | | if variable._var == id { [INFO] [stdout] 41 | | return Some(variable); [INFO] [stdout] ... | [INFO] [stdout] 44 | | None [INFO] [stdout] | |____________^ help: replace with an iterator: `self.variables.iter().find(|&variable| variable._var == id).map(|v| v as _)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 36 - assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] 36 + assert!(project.settings.edgedb.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | assert_eq!(project.settings.optin.enabled, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 37 - assert_eq!(project.settings.optin.enabled, false); [INFO] [stdout] 37 + assert!(!project.settings.optin.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 40 | assert_eq!(project.settings.disable_passthrough_rollouts, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 40 - assert_eq!(project.settings.disable_passthrough_rollouts, false); [INFO] [stdout] 40 + assert!(!project.settings.disable_passthrough_rollouts); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/config/config_tests.rs:92:18 [INFO] [stdout] | [INFO] [stdout] 92 | .expect(&format!("Failed to parse variable JSON: {}", json_str)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("Failed to parse variable JSON: {}", json_str))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | assert_eq!(config.disable_automatic_event_logging, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 123 - assert_eq!(config.disable_automatic_event_logging, false); [INFO] [stdout] 123 + assert!(!config.disable_automatic_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 124 | assert_eq!(config.disable_custom_event_logging, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 124 - assert_eq!(config.disable_custom_event_logging, true); [INFO] [stdout] 124 + assert!(config.disable_custom_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:125:9 [INFO] [stdout] | [INFO] [stdout] 125 | assert_eq!(config.disable_push_state_event_logging, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 125 - assert_eq!(config.disable_push_state_event_logging, false); [INFO] [stdout] 125 + assert!(!config.disable_push_state_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `config::config::OptInSettings` [INFO] [stdout] --> src/config/config_tests.rs:136:24 [INFO] [stdout] | [INFO] [stdout] 136 | optin: OptInSettings { [INFO] [stdout] | ________________________^ [INFO] [stdout] 137 | | enabled: true, [INFO] [stdout] 138 | | title: "Test Title".to_string(), [INFO] [stdout] 139 | | description: "Test Description".to_string(), [INFO] [stdout] ... | [INFO] [stdout] 146 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 136 ~ optin: OptInSettings { [INFO] [stdout] 137 + enabled: true, [INFO] [stdout] 138 + title: "Test Title".to_string(), [INFO] [stdout] 139 + description: "Test Description".to_string(), [INFO] [stdout] 140 + image_url: "https://test.com/image.png".to_string(), [INFO] [stdout] 141 + colors: OptInColors { [INFO] [stdout] 142 + primary: "#FFFFFF".to_string(), [INFO] [stdout] 143 + secondary: "#000000".to_string(), [INFO] [stdout] 144 + }, [INFO] [stdout] 145 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:263:9 [INFO] [stdout] | [INFO] [stdout] 263 | assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 263 - assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] 263 + assert!(project.settings.edgedb.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | assert_eq!(project.settings.optin.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 264 - assert_eq!(project.settings.optin.enabled, true); [INFO] [stdout] 264 + assert!(project.settings.optin.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:269:9 [INFO] [stdout] | [INFO] [stdout] 269 | assert_eq!(project.settings.disable_passthrough_rollouts, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 269 - assert_eq!(project.settings.disable_passthrough_rollouts, true); [INFO] [stdout] 269 + assert!(project.settings.disable_passthrough_rollouts); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 343 | assert_eq!(config.disable_automatic_event_logging, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 343 - assert_eq!(config.disable_automatic_event_logging, true); [INFO] [stdout] 343 + assert!(config.disable_automatic_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:344:9 [INFO] [stdout] | [INFO] [stdout] 344 | assert_eq!(config.disable_custom_event_logging, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 344 - assert_eq!(config.disable_custom_event_logging, false); [INFO] [stdout] 344 + assert!(!config.disable_custom_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:345:9 [INFO] [stdout] | [INFO] [stdout] 345 | assert_eq!(config.disable_push_state_event_logging, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 345 - assert_eq!(config.disable_push_state_event_logging, true); [INFO] [stdout] 345 + assert!(config.disable_push_state_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:378:9 [INFO] [stdout] | [INFO] [stdout] 378 | assert_eq!(config.project.settings.edgedb.enabled, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 378 - assert_eq!(config.project.settings.edgedb.enabled, false); [INFO] [stdout] 378 + assert!(!config.project.settings.edgedb.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:379:9 [INFO] [stdout] | [INFO] [stdout] 379 | assert_eq!(config.project.settings.optin.enabled, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 379 - assert_eq!(config.project.settings.optin.enabled, false); [INFO] [stdout] 379 + assert!(!config.project.settings.optin.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:380:9 [INFO] [stdout] | [INFO] [stdout] 380 | assert_eq!(config.project.settings.disable_passthrough_rollouts, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 380 - assert_eq!(config.project.settings.disable_passthrough_rollouts, true); [INFO] [stdout] 380 + assert!(config.project.settings.disable_passthrough_rollouts); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:385:9 [INFO] [stdout] | [INFO] [stdout] 385 | assert_eq!(obfuscation.required, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 385 - assert_eq!(obfuscation.required, false); [INFO] [stdout] 385 + assert!(!obfuscation.required); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:386:9 [INFO] [stdout] | [INFO] [stdout] 386 | assert_eq!(obfuscation.enabled, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 386 - assert_eq!(obfuscation.enabled, false); [INFO] [stdout] 386 + assert!(!obfuscation.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:464:9 [INFO] [stdout] | [INFO] [stdout] 464 | assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 464 - assert_eq!(project.settings.edgedb.enabled, true); [INFO] [stdout] 464 + assert!(project.settings.edgedb.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:465:9 [INFO] [stdout] | [INFO] [stdout] 465 | assert_eq!(project.settings.optin.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 465 - assert_eq!(project.settings.optin.enabled, true); [INFO] [stdout] 465 + assert!(project.settings.optin.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:466:9 [INFO] [stdout] | [INFO] [stdout] 466 | assert_eq!(project.settings.disable_passthrough_rollouts, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 466 - assert_eq!(project.settings.disable_passthrough_rollouts, false); [INFO] [stdout] 466 + assert!(!project.settings.disable_passthrough_rollouts); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:470:9 [INFO] [stdout] | [INFO] [stdout] 470 | assert_eq!(obfuscation.required, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 470 - assert_eq!(obfuscation.required, true); [INFO] [stdout] 470 + assert!(obfuscation.required); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:471:9 [INFO] [stdout] | [INFO] [stdout] 471 | assert_eq!(obfuscation.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 471 - assert_eq!(obfuscation.enabled, true); [INFO] [stdout] 471 + assert!(obfuscation.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:683:9 [INFO] [stdout] | [INFO] [stdout] 683 | assert_eq!(config.project.settings.edgedb.enabled, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 683 - assert_eq!(config.project.settings.edgedb.enabled, false); [INFO] [stdout] 683 + assert!(!config.project.settings.edgedb.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/config/config_tests.rs:684:9 [INFO] [stdout] | [INFO] [stdout] 684 | assert_eq!(config.project.settings.optin.enabled, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 684 - assert_eq!(config.project.settings.optin.enabled, true); [INFO] [stdout] 684 + assert!(config.project.settings.optin.enabled); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | return self.disable_automatic_event_logging; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 31 - return self.disable_automatic_event_logging; [INFO] [stdout] 31 + self.disable_automatic_event_logging [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `success` after checking its variant with `is_err` [INFO] [stdout] --> src/events/event_queue.rs:166:17 [INFO] [stdout] | [INFO] [stdout] 162 | if success.is_err() { [INFO] [stdout] | ------------------- help: try: `if let Err() = success` [INFO] [stdout] ... [INFO] [stdout] 166 | success.unwrap_err() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 169 - return Ok(true); [INFO] [stdout] 169 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `success` after checking its variant with `is_err` [INFO] [stdout] --> src/events/event_queue.rs:181:17 [INFO] [stdout] | [INFO] [stdout] 177 | if success.is_err() { [INFO] [stdout] | ------------------- help: try: `if let Err() = success` [INFO] [stdout] ... [INFO] [stdout] 181 | success.unwrap_err() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:184:9 [INFO] [stdout] | [INFO] [stdout] 184 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 184 - return Ok(true); [INFO] [stdout] 184 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/events/event_queue.rs:328:9 [INFO] [stdout] | [INFO] [stdout] 328 | return Ok(true); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 328 - return Ok(true); [INFO] [stdout] 328 + Ok(true) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:354:18 [INFO] [stdout] | [INFO] [stdout] 354 | .or_insert_with(HashMap::new); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:352:18 [INFO] [stdout] | [INFO] [stdout] 352 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:350:18 [INFO] [stdout] | [INFO] [stdout] 350 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:348:18 [INFO] [stdout] | [INFO] [stdout] 348 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:372:18 [INFO] [stdout] | [INFO] [stdout] 372 | .or_insert_with(HashMap::new); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:370:18 [INFO] [stdout] | [INFO] [stdout] 370 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:368:18 [INFO] [stdout] | [INFO] [stdout] 368 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/events/event_queue.rs:366:18 [INFO] [stdout] | [INFO] [stdout] 366 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `result` after checking its variant with `is_err` [INFO] [stdout] --> src/events/event_queue_tests.rs:308:31 [INFO] [stdout] | [INFO] [stdout] 305 | if result.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Err() = result` [INFO] [stdout] ... [INFO] [stdout] 308 | let err_msg = result.unwrap_err().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/events/event_queue_tests.rs:383:9 [INFO] [stdout] | [INFO] [stdout] 383 | assert_eq!(options.disable_automatic_event_logging, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 383 - assert_eq!(options.disable_automatic_event_logging, false); [INFO] [stdout] 383 + assert!(!options.disable_automatic_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/events/event_queue_tests.rs:384:9 [INFO] [stdout] | [INFO] [stdout] 384 | assert_eq!(options.disable_custom_event_logging, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 384 - assert_eq!(options.disable_custom_event_logging, false); [INFO] [stdout] 384 + assert!(!options.disable_custom_event_logging); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/events/event_queue_tests.rs:420:9 [INFO] [stdout] | [INFO] [stdout] 420 | assert_eq!(result.unwrap(), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 420 - assert_eq!(result.unwrap(), false); [INFO] [stdout] 420 + assert!(!result.unwrap()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:223:9 [INFO] [stdout] | [INFO] [stdout] 223 | / if is_version_field { [INFO] [stdout] 224 | | if let serde_json::Value::String(user_str) = user_value { [INFO] [stdout] 225 | | return self.compare_version_strings(user_str, comparator); [INFO] [stdout] 226 | | } [INFO] [stdout] 227 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 223 ~ if is_version_field [INFO] [stdout] 224 ~ && let serde_json::Value::String(user_str) = user_value { [INFO] [stdout] 225 | return self.compare_version_strings(user_str, comparator); [INFO] [stdout] 226 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:241:17 [INFO] [stdout] | [INFO] [stdout] 241 | / if let ( [INFO] [stdout] 242 | | serde_json::Value::String(user_str), [INFO] [stdout] 243 | | serde_json::Value::String(filter_str), [INFO] [stdout] 244 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 249 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 244 ~ ) = (user_value, filter_value) [INFO] [stdout] 245 ~ && !filter_str.is_empty() && user_str.contains(filter_str) { [INFO] [stdout] 246 | return false; // If it contains any value, fail [INFO] [stdout] 247 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:256:17 [INFO] [stdout] | [INFO] [stdout] 256 | / if let ( [INFO] [stdout] 257 | | serde_json::Value::String(user_str), [INFO] [stdout] 258 | | serde_json::Value::String(filter_str), [INFO] [stdout] 259 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 264 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 259 ~ ) = (user_value, filter_value) [INFO] [stdout] 260 ~ && !filter_str.is_empty() && user_str.starts_with(filter_str) { [INFO] [stdout] 261 | return false; // If it starts with any value, fail [INFO] [stdout] 262 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:271:17 [INFO] [stdout] | [INFO] [stdout] 271 | / if let ( [INFO] [stdout] 272 | | serde_json::Value::String(user_str), [INFO] [stdout] 273 | | serde_json::Value::String(filter_str), [INFO] [stdout] 274 | | ) = (user_value, filter_value) [INFO] [stdout] ... | [INFO] [stdout] 279 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 274 ~ ) = (user_value, filter_value) [INFO] [stdout] 275 ~ && !filter_str.is_empty() && user_str.ends_with(filter_str) { [INFO] [stdout] 276 | return false; // If it ends with any value, fail [INFO] [stdout] 277 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:388:13 [INFO] [stdout] | [INFO] [stdout] 388 | / if let Some(audience) = audiences.get(audience_id) { [INFO] [stdout] 389 | | if audience [INFO] [stdout] 390 | | .filters [INFO] [stdout] 391 | | .evaluate(audiences, user, client_custom_data) [INFO] [stdout] ... | [INFO] [stdout] 396 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 388 ~ if let Some(audience) = audiences.get(audience_id) [INFO] [stdout] 389 ~ && audience [INFO] [stdout] 390 | .filters [INFO] [stdout] ... [INFO] [stdout] 394 | break; [INFO] [stdout] 395 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `self.values.get(0)` [INFO] [stdout] --> src/segmentation/filters.rs:580:27 [INFO] [stdout] | [INFO] [stdout] 580 | let first_value = self.values.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `self.values.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `v1_parts` [INFO] [stdout] --> src/segmentation/filters.rs:728:18 [INFO] [stdout] | [INFO] [stdout] 728 | for i in min_len..v1_parts.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 728 - for i in min_len..v1_parts.len() { [INFO] [stdout] 728 + for in v1_parts.iter().skip(min_len) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `v2_parts` [INFO] [stdout] --> src/segmentation/filters.rs:735:18 [INFO] [stdout] | [INFO] [stdout] 735 | for i in min_len..v2_parts.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 735 - for i in min_len..v2_parts.len() { [INFO] [stdout] 735 + for in v2_parts.iter().skip(min_len) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/segmentation/filters.rs:794:13 [INFO] [stdout] | [INFO] [stdout] 794 | / if v1_has_suffix && v2_has_suffix { [INFO] [stdout] 795 | | if v1_suffix != v2_suffix { [INFO] [stdout] 796 | | return false; [INFO] [stdout] 797 | | } [INFO] [stdout] 798 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 794 ~ if v1_has_suffix && v2_has_suffix [INFO] [stdout] 795 ~ && v1_suffix != v2_suffix { [INFO] [stdout] 796 | return false; [INFO] [stdout] 797 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/segmentation/target.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | return Err(FAILED_TO_DECIDE_VARIATION); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 37 - return Err(FAILED_TO_DECIDE_VARIATION); [INFO] [stdout] 37 + Err(FAILED_TO_DECIDE_VARIATION) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/segmentation/filter_tests.rs:1434:9 [INFO] [stdout] | [INFO] [stdout] 1434 | / assert_eq!( [INFO] [stdout] 1435 | | true, [INFO] [stdout] 1436 | | filter_gt.evaluate(&audiences, &mut user, &client_custom_data) [INFO] [stdout] 1437 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1434 ~ assert!( [INFO] [stdout] 1435 ~ filter_gt.evaluate(&audiences, &mut user, &client_custom_data) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/user/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | pub mod user; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `DateTime` which implements the `Copy` trait [INFO] [stdout] --> src/user/user.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | last_seen_date: self.last_seen_date.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.last_seen_date` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/user/user.rs:163:9 [INFO] [stdout] | [INFO] [stdout] 163 | return popuser; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 163 - return popuser; [INFO] [stdout] 163 + popuser [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `DateTime` which implements the `Copy` trait [INFO] [stdout] --> src/user/user.rs:151:29 [INFO] [stdout] | [INFO] [stdout] 151 | last_seen_date: user.last_seen_date.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `user.last_seen_date` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/util/constants.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod constants {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/errors.rs:116:5 [INFO] [stdout] | [INFO] [stdout] 116 | return DevCycleError::new("Event queue not initialized"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 116 - return DevCycleError::new("Event queue not initialized"); [INFO] [stdout] 116 + DevCycleError::new("Event queue not initialized") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/util/murmurhash.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub(crate) mod murmurhash { [INFO] [stdout] 2 | | use crate::constants; [INFO] [stdout] 3 | | use murmur3::murmur3_32; [INFO] [stdout] 4 | | use serde::{Deserialize, Serialize}; [INFO] [stdout] ... | [INFO] [stdout] 35 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/murmurhash.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | return murmur3_32(&mut cursor, seed).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 8 - return murmur3_32(&mut cursor, seed).unwrap(); [INFO] [stdout] 8 + murmur3_32(&mut cursor, seed).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/murmurhash.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | return f64::from(hash) / f64::from(constants::MAX_HASH_VALUE); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return f64::from(hash) / f64::from(constants::MAX_HASH_VALUE); [INFO] [stdout] 12 + f64::from(hash) / f64::from(constants::MAX_HASH_VALUE) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/ffi.rs:13:50 [INFO] [stdout] | [INFO] [stdout] 13 | static LAST_ERROR: RefCell> = RefCell::new(None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(None) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] = note: `#[warn(clippy::missing_const_for_thread_local)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/ffi.rs:41:61 [INFO] [stdout] | [INFO] [stdout] 41 | static LAST_ERROR_CODE: RefCell = RefCell::new(DevCycleFFIErrorCode::Success); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(DevCycleFFIErrorCode::Success) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:65:1 [INFO] [stdout] | [INFO] [stdout] 65 | pub unsafe extern "C" fn devcycle_get_last_error() -> *mut c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] = note: `#[warn(clippy::missing_safety_doc)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:76:1 [INFO] [stdout] | [INFO] [stdout] 76 | pub unsafe extern "C" fn devcycle_get_last_error_code() -> DevCycleFFIErrorCode { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [INFO] [stdout] --> src/ffi.rs:81:1 [INFO] [stdout] | [INFO] [stdout] 81 | pub unsafe extern "C" fn devcycle_error_code_to_string(code: DevCycleFFIErrorCode) -> *mut c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unsafe function's docs are missing a `# Safety` section [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] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: passing a unit value to a function [INFO] [stdout] --> src/lib.rs:58:5 [INFO] [stdout] | [INFO] [stdout] 58 | Ok(configmanager::set_config(sdk_key, config_body)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stdout] = note: `#[warn(clippy::unit_arg)]` on by default [INFO] [stdout] help: move the expression in front of the call and replace it with the unit literal `()` [INFO] [stdout] | [INFO] [stdout] 58 ~ configmanager::set_config(sdk_key, config_body); [INFO] [stdout] 59 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] For more information about this error, try `rustc --explain E0133`. [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 33.99s [INFO] running `Command { std: "docker" "inspect" "2afb4c00c9e936d060352827c99eedad3510993bc16d78ccec79a13542df889f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2afb4c00c9e936d060352827c99eedad3510993bc16d78ccec79a13542df889f", kill_on_drop: false }` [INFO] [stdout] 2afb4c00c9e936d060352827c99eedad3510993bc16d78ccec79a13542df889f