[INFO] fetching crate cal-redis 0.1.80... [INFO] building cal-redis-0.1.80 against master#c7f6aa2869acdbf014d094c6e427e554e160b6db for pr-146237-2 [INFO] extracting crate cal-redis 0.1.80 into /workspace/builds/worker-4-tc1/source [INFO] started tweaking crates.io crate cal-redis 0.1.80 [INFO] finished tweaking crates.io crate cal-redis 0.1.80 [INFO] tweaked toml for crates.io crate cal-redis 0.1.80 written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate cal-redis 0.1.80 on toolchain c7f6aa2869acdbf014d094c6e427e554e160b6db [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate cal-redis 0.1.80 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" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded oncemutex v0.1.1 [INFO] [stderr] Downloaded validator v0.18.1 [INFO] [stderr] Downloaded once_cell v1.21.2 [INFO] [stderr] Downloaded security-framework-sys v2.14.0 [INFO] [stderr] Downloaded signal-hook-registry v1.4.2 [INFO] [stderr] Downloaded openssl-sys v0.9.107 [INFO] [stderr] Downloaded darling_macro v0.20.11 [INFO] [stderr] Downloaded regex-cache v0.2.1 [INFO] [stderr] Downloaded sha1_smol v1.0.1 [INFO] [stderr] Downloaded serde_bytes v0.11.17 [INFO] [stderr] Downloaded ip-in-subnet v0.1.4 [INFO] [stderr] Downloaded darling v0.20.11 [INFO] [stderr] Downloaded cal-jambonz v0.1.72 [INFO] [stderr] Downloaded openssl v0.10.72 [INFO] [stderr] Downloaded bson v2.14.0 [INFO] [stderr] Downloaded redis v0.29.5 [INFO] [stderr] Downloaded arc-swap v1.7.1 [INFO] [stderr] Downloaded zerocopy-derive v0.8.24 [INFO] [stderr] Downloaded quick-xml v0.37.3 [INFO] [stderr] Downloaded rand v0.9.0 [INFO] [stderr] Downloaded cc v1.2.17 [INFO] [stderr] Downloaded zerocopy v0.8.24 [INFO] [stderr] Downloaded tokio-util v0.7.14 [INFO] [stderr] Downloaded darling_core v0.20.11 [INFO] [stderr] Downloaded windows-core v0.58.0 [INFO] [stderr] Downloaded windows-implement v0.58.0 [INFO] [stderr] Downloaded serde_repr v0.1.20 [INFO] [stderr] Downloaded chrono v0.4.40 [INFO] [stderr] Downloaded netaddr2 v0.7.1 [INFO] [stderr] Downloaded lru-cache v0.1.2 [INFO] [stderr] Downloaded validator_derive v0.18.2 [INFO] [stderr] Downloaded windows-strings v0.1.0 [INFO] [stderr] Downloaded generator v0.8.4 [INFO] [stderr] Downloaded strum v0.26.3 [INFO] [stderr] Downloaded iana-time-zone v0.1.62 [INFO] [stderr] Downloaded windows-interface v0.58.0 [INFO] [stderr] Downloaded schannel v0.1.27 [INFO] [stderr] Downloaded windows-result v0.2.0 [INFO] [stderr] Downloaded phonenumber v0.3.7+8.13.52 [INFO] [stderr] Downloaded strum_macros v0.26.4 [INFO] [stderr] Downloaded windows v0.58.0 [INFO] [stderr] Downloaded cal-core v0.2.144 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 65f65705204011e3d819f90e97704163d70378019202069867ab0dbbfb423058 [INFO] running `Command { std: "docker" "start" "-a" "65f65705204011e3d819f90e97704163d70378019202069867ab0dbbfb423058", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "65f65705204011e3d819f90e97704163d70378019202069867ab0dbbfb423058", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "65f65705204011e3d819f90e97704163d70378019202069867ab0dbbfb423058", kill_on_drop: false }` [INFO] [stdout] 65f65705204011e3d819f90e97704163d70378019202069867ab0dbbfb423058 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 870cf33d957bb0369ac880529f11813fcc13b1f469f0d0c80887572954a6f18b [INFO] running `Command { std: "docker" "start" "-a" "870cf33d957bb0369ac880529f11813fcc13b1f469f0d0c80887572954a6f18b", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.94 [INFO] [stderr] Compiling unicode-ident v1.0.18 [INFO] [stderr] Compiling libc v0.2.171 [INFO] [stderr] Compiling autocfg v1.4.0 [INFO] [stderr] Compiling cfg-if v1.0.0 [INFO] [stderr] Compiling memchr v2.7.4 [INFO] [stderr] Compiling smallvec v1.14.0 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling icu_locid_transform_data v1.5.1 [INFO] [stderr] Compiling litemap v0.7.5 [INFO] [stderr] Compiling writeable v0.5.5 [INFO] [stderr] Compiling getrandom v0.3.2 [INFO] [stderr] Compiling icu_properties_data v1.5.1 [INFO] [stderr] Compiling once_cell v1.21.2 [INFO] [stderr] Compiling cc v1.2.17 [INFO] [stderr] Compiling icu_normalizer_data v1.5.1 [INFO] [stderr] Compiling parking_lot_core v0.9.10 [INFO] [stderr] Compiling regex-syntax v0.8.5 [INFO] [stderr] Compiling scopeguard v1.2.0 [INFO] [stderr] Compiling zerocopy v0.8.24 [INFO] [stderr] Compiling utf16_iter v1.0.5 [INFO] [stderr] Compiling rustversion v1.0.20 [INFO] [stderr] Compiling write16 v1.0.0 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling equivalent v1.0.2 [INFO] [stderr] Compiling hashbrown v0.15.2 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling strsim v0.11.1 [INFO] [stderr] Compiling ident_case v1.0.1 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling percent-encoding v2.3.1 [INFO] [stderr] Compiling openssl v0.10.72 [INFO] [stderr] Compiling aho-corasick v1.1.3 [INFO] [stderr] Compiling log v0.4.27 [INFO] [stderr] Compiling heck v0.5.0 [INFO] [stderr] Compiling lock_api v0.4.12 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling radium v0.7.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling form_urlencoded v1.2.1 [INFO] [stderr] Compiling slab v0.4.9 [INFO] [stderr] Compiling quick-xml v0.37.3 [INFO] [stderr] Compiling tinyvec v1.9.0 [INFO] [stderr] Compiling ahash v0.8.11 [INFO] [stderr] Compiling tap v1.0.1 [INFO] [stderr] Compiling futures-sink v0.3.31 [INFO] [stderr] Compiling time-core v0.1.4 [INFO] [stderr] Compiling futures-core v0.3.31 [INFO] [stderr] Compiling bitflags v2.9.0 [INFO] [stderr] Compiling indexmap v2.9.0 [INFO] [stderr] Compiling deranged v0.4.0 [INFO] [stderr] Compiling time-macros v0.2.22 [INFO] [stderr] Compiling wyz v0.5.1 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Compiling rand_core v0.9.3 [INFO] [stderr] Compiling socket2 v0.5.8 [INFO] [stderr] Compiling mio v1.0.3 [INFO] [stderr] Compiling syn v2.0.100 [INFO] [stderr] Compiling parking_lot v0.12.3 [INFO] [stderr] Compiling signal-hook-registry v1.4.2 [INFO] [stderr] Compiling unicode-normalization v0.1.24 [INFO] [stderr] Compiling getrandom v0.2.15 [INFO] [stderr] Compiling lru-cache v0.1.2 [INFO] [stderr] Compiling iana-time-zone v0.1.62 [INFO] [stderr] Compiling oncemutex v0.1.1 [INFO] [stderr] Compiling zerocopy v0.7.35 [INFO] [stderr] Compiling regex-automata v0.4.9 [INFO] [stderr] Compiling netaddr2 v0.7.1 [INFO] [stderr] Compiling openssl-sys v0.9.107 [INFO] [stderr] Compiling unicode-bidi v0.3.18 [INFO] [stderr] Compiling portable-atomic v1.11.0 [INFO] [stderr] Compiling minimal-lexical v0.2.1 [INFO] [stderr] Compiling funty v2.0.0 [INFO] [stderr] Compiling time v0.3.41 [INFO] [stderr] Compiling ip-in-subnet v0.1.4 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling num-integer v0.1.46 [INFO] [stderr] Compiling base64 v0.22.1 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling native-tls v0.2.14 [INFO] [stderr] Compiling idna v0.5.0 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling bitvec v1.0.1 [INFO] [stderr] Compiling moka v0.12.10 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling num-bigint v0.4.6 [INFO] [stderr] Compiling crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling crossbeam-channel v0.5.15 [INFO] [stderr] Compiling rand v0.9.0 [INFO] [stderr] Compiling tagptr v0.2.0 [INFO] [stderr] Compiling sha1_smol v1.0.1 [INFO] [stderr] Compiling arc-swap v1.7.1 [INFO] [stderr] Compiling bincode v1.3.3 [INFO] [stderr] Compiling regex v1.11.1 [INFO] [stderr] Compiling regex-cache v0.2.1 [INFO] [stderr] Compiling synstructure v0.13.1 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.7.5 [INFO] [stderr] Compiling tokio v1.44.2 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling yoke v0.7.5 [INFO] [stderr] Compiling zerovec v0.10.4 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling validator_derive v0.18.2 [INFO] [stderr] Compiling tinystr v0.7.6 [INFO] [stderr] Compiling icu_collections v1.5.0 [INFO] [stderr] Compiling icu_locid v1.5.0 [INFO] [stderr] Compiling phonenumber v0.3.7+8.13.52 [INFO] [stderr] Compiling icu_provider v1.5.0 [INFO] [stderr] Compiling icu_locid_transform v1.5.0 [INFO] [stderr] Compiling icu_properties v1.5.1 [INFO] [stderr] Compiling tokio-util v0.7.14 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling uuid v1.16.0 [INFO] [stderr] Compiling chrono v0.4.40 [INFO] [stderr] Compiling serde_bytes v0.11.17 [INFO] [stderr] Compiling combine v4.6.7 [INFO] [stderr] Compiling icu_normalizer v1.5.0 [INFO] [stderr] Compiling cal-jambonz v0.1.72 [INFO] [stderr] Compiling bson v2.14.0 [INFO] [stderr] Compiling idna_adapter v1.2.0 [INFO] [stderr] Compiling idna v1.0.3 [INFO] [stderr] Compiling url v2.5.4 [INFO] [stderr] Compiling validator v0.18.1 [INFO] [stderr] Compiling redis v0.29.5 [INFO] [stderr] Compiling cal-core v0.2.144 [INFO] [stderr] Compiling cal-redis v0.1.80 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `deserialize_from_json` [INFO] [stdout] --> src/account.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | deserialize_from_json, get_hash_item, get_items, insert_items, serialize_to_json, [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: `Serialize` [INFO] [stdout] --> src/account.rs:16:35 [INFO] [stdout] | [INFO] [stdout] 16 | use serde::{de::DeserializeOwned, Serialize}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `UserLite` [INFO] [stdout] --> src/local_cache.rs:2:81 [INFO] [stdout] | [INFO] [stdout] 2 | use cal_core::{AccountLite, Asset, FlowState, Hook, Proxy, Region, Trunk, User, UserLite, DDI}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn agent_status_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | status: &AgentStatus, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:21:13 [INFO] [stdout] | [INFO] [stdout] 21 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] = note: `#[warn(dependency_on_unit_never_type_fallback)]` (part of `#[warn(rust_2024_compatibility)]`) on by default [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 21 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 22 | [INFO] [stdout] 23 | // Update indexes [INFO] [stdout] 24 ~ con.hset::<_, _, _, ()>( [INFO] [stdout] 25 | &AgentKeys::by_user(account_id), [INFO] [stdout] ... [INFO] [stdout] 33 | println!("[CallableCache::agent_status_set] Agent is registered, adding to registered set"); [INFO] [stdout] 34 ~ con.sadd::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 35 | .await?; [INFO] [stdout] 36 | } else { [INFO] [stdout] 37 | println!("[CallableCache::agent_status_set] Agent is not registered, removing from registered set"); [INFO] [stdout] 38 ~ con.srem::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 39 | .await?; [INFO] [stdout] ... [INFO] [stdout] 44 | println!("[CallableCache::agent_status_set] Agent is available, adding to available set"); [INFO] [stdout] 45 ~ con.sadd::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] 46 | .await?; [INFO] [stdout] 47 | } else { [INFO] [stdout] 48 | println!("[CallableCache::agent_status_set] Agent is not available, removing from available set"); [INFO] [stdout] 49 ~ con.srem::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:87:5 [INFO] [stdout] | [INFO] [stdout] 87 | / pub async fn add_connected_agent( [INFO] [stdout] 88 | | &self, [INFO] [stdout] 89 | | account_id: &str, [INFO] [stdout] 90 | | user_id: &str, [INFO] [stdout] 91 | | agent_id: &str, [INFO] [stdout] 92 | | ws_connection_id: &str, [INFO] [stdout] 93 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | con.sadd(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 100 ~ con.sadd::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 101 | [INFO] [stdout] 102 | // Map WebSocket connection to account for routing [INFO] [stdout] 103 ~ con.hset::<_, _, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id, account_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:109:5 [INFO] [stdout] | [INFO] [stdout] 109 | / pub async fn remove_connected_agent( [INFO] [stdout] 110 | | &self, [INFO] [stdout] 111 | | account_id: &str, [INFO] [stdout] 112 | | user_id: &str, [INFO] [stdout] 113 | | agent_id: &str, [INFO] [stdout] 114 | | ws_connection_id: &str, [INFO] [stdout] 115 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:121:13 [INFO] [stdout] | [INFO] [stdout] 121 | con.srem(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 121 ~ con.srem::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 122 | [INFO] [stdout] 123 | // Remove WebSocket mapping [INFO] [stdout] 124 ~ con.hdel::<_, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn queue_group_set(&self, queue: &QueueGroup) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 17 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 18 | [INFO] [stdout] 19 | // Track in active queues [INFO] [stdout] 20 ~ con.sadd::<_, _, ()>(&crate::constants::QueueKeys::active(&queue.account_id), &queue.name).await?; [INFO] [stdout] 21 | [INFO] [stdout] ... [INFO] [stdout] 29 | }); [INFO] [stdout] 30 ~ con.hset::<_, _, _, ()>(&meta_key, &queue.name, meta.to_string()).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | pub async fn queue_group_delete(&self, account_id: &str, queue_name: &str) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:68:13 [INFO] [stdout] | [INFO] [stdout] 68 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 68 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 69 | [INFO] [stdout] 70 | // Remove from active set [INFO] [stdout] 71 ~ con.srem::<_, _, ()>(&crate::constants::QueueKeys::active(account_id), queue_name).await?; [INFO] [stdout] 72 | [INFO] [stdout] 73 | // Remove metadata [INFO] [stdout] 74 | let meta_key = crate::constants::QueueKeys::metadata(account_id); [INFO] [stdout] 75 ~ con.hdel::<_, _, ()>(&meta_key, queue_name).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn session_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | session_data: &SessionData, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:29:17 [INFO] [stdout] | [INFO] [stdout] 29 | con.set_ex(&key, session_json, ttl).await?; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.set_ex::<_, _, ()>(&key, session_json, ttl).await?; [INFO] [stdout] 30 | [INFO] [stdout] 31 | // Track active sessions [INFO] [stdout] 32 ~ con.sadd::<_, _, ()>(&SessionKeys::active(account_id), &session_data.session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:130:5 [INFO] [stdout] | [INFO] [stdout] 130 | / pub async fn session_delete( [INFO] [stdout] 131 | | &self, [INFO] [stdout] 132 | | account_id: &str, [INFO] [stdout] 133 | | session_id: &str, [INFO] [stdout] 134 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:138:13 [INFO] [stdout] | [INFO] [stdout] 138 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 138 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 139 ~ con.srem::<_, _, ()>(&SessionKeys::active(account_id), session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/websocket.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 46 | / pub async fn publish_account_event( [INFO] [stdout] 47 | | &self, [INFO] [stdout] 48 | | account_id: &str, [INFO] [stdout] 49 | | event: &RedisEvent, [INFO] [stdout] 50 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/websocket.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | con.publish(&channel, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 57 | con.publish::<_, _, ()>(&channel, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/helpers.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | / pub async fn publish_event( [INFO] [stdout] 146 | | con: &mut MultiplexedConnection, [INFO] [stdout] 147 | | event: RedisEvent, [INFO] [stdout] 148 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/helpers.rs:158:9 [INFO] [stdout] | [INFO] [stdout] 158 | con.publish(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 158 | con.publish::<_, _, ()>(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_jambonz_entry(&self, entry: JambonzEntry) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:28:13 [INFO] [stdout] | [INFO] [stdout] 28 | con.hset(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 28 | con.hset::<_, _, _, ()>(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | +++++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:133:5 [INFO] [stdout] | [INFO] [stdout] 133 | pub async fn insert_jambonz_entries(&self, entries: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:151:14 [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_contact(&self, contact: Contact) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:29:13 [INFO] [stdout] | [INFO] [stdout] 29 | con.hset(&hash_key, &contact.id, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.hset::<_, _, _, ()>(&hash_key, &contact.id, value).await?; [INFO] [stdout] 30 | [INFO] [stdout] ... [INFO] [stdout] 34 | // Map primary phone to contact ID [INFO] [stdout] 35 ~ con.hset::<_, _, _, ()>(&idents_key, &contact.primary, &contact.id).await?; [INFO] [stdout] 36 | [INFO] [stdout] 37 | // Map secondary phone if exists [INFO] [stdout] 38 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 39 ~ con.hset::<_, _, _, ()>(&idents_key, secondary, &contact.id).await?; [INFO] [stdout] 40 | } [INFO] [stdout] ... [INFO] [stdout] 43 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 44 ~ con.hset::<_, _, _, ()>(&idents_key, tertiary, &contact.id).await?; [INFO] [stdout] 45 | } [INFO] [stdout] ... [INFO] [stdout] 48 | if let Some(ref email) = contact.email { [INFO] [stdout] 49 ~ con.hset::<_, _, _, ()>(&idents_key, email, &contact.id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:197:5 [INFO] [stdout] | [INFO] [stdout] 197 | / pub async fn delete_contact( [INFO] [stdout] 198 | | &self, [INFO] [stdout] 199 | | account_id: &str, [INFO] [stdout] 200 | | contact_id: &str, [INFO] [stdout] 201 | | ) -> Result { [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:213:17 [INFO] [stdout] | [INFO] [stdout] 213 | con.hdel(&idents_key, &contact.primary).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 213 ~ con.hdel::<_, _, ()>(&idents_key, &contact.primary).await?; [INFO] [stdout] 214 | [INFO] [stdout] 215 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 216 ~ con.hdel::<_, _, ()>(&idents_key, secondary).await?; [INFO] [stdout] 217 | } [INFO] [stdout] 218 | [INFO] [stdout] 219 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 220 ~ con.hdel::<_, _, ()>(&idents_key, tertiary).await?; [INFO] [stdout] 221 | } [INFO] [stdout] 222 | [INFO] [stdout] 223 | if let Some(ref email) = contact.email { [INFO] [stdout] 224 ~ con.hdel::<_, _, ()>(&idents_key, email).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:249:5 [INFO] [stdout] | [INFO] [stdout] 249 | pub async fn insert_contacts(&self, contacts: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:298:14 [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `insert_addresses` is never used [INFO] [stdout] --> src/account.rs:407:10 [INFO] [stdout] | [INFO] [stdout] 407 | async fn insert_addresses( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 55s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: cal-redis v0.1.80 (/opt/rustwide/workdir) [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2` [INFO] running `Command { std: "docker" "inspect" "870cf33d957bb0369ac880529f11813fcc13b1f469f0d0c80887572954a6f18b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "870cf33d957bb0369ac880529f11813fcc13b1f469f0d0c80887572954a6f18b", kill_on_drop: false }` [INFO] [stdout] 870cf33d957bb0369ac880529f11813fcc13b1f469f0d0c80887572954a6f18b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 8817fe9d2cbee9d751ee133a78fe4bbd367a3610ab41e03ece0ea60d5f17ab4d [INFO] running `Command { std: "docker" "start" "-a" "8817fe9d2cbee9d751ee133a78fe4bbd367a3610ab41e03ece0ea60d5f17ab4d", kill_on_drop: false }` [INFO] [stdout] warning: unused import: `deserialize_from_json` [INFO] [stdout] --> src/account.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | deserialize_from_json, get_hash_item, get_items, insert_items, serialize_to_json, [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: `Serialize` [INFO] [stdout] --> src/account.rs:16:35 [INFO] [stdout] | [INFO] [stdout] 16 | use serde::{de::DeserializeOwned, Serialize}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `UserLite` [INFO] [stdout] --> src/local_cache.rs:2:81 [INFO] [stdout] | [INFO] [stdout] 2 | use cal_core::{AccountLite, Asset, FlowState, Hook, Proxy, Region, Trunk, User, UserLite, DDI}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn agent_status_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | status: &AgentStatus, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:21:13 [INFO] [stdout] | [INFO] [stdout] 21 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] = note: `#[warn(dependency_on_unit_never_type_fallback)]` (part of `#[warn(rust_2024_compatibility)]`) on by default [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 21 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 22 | [INFO] [stdout] 23 | // Update indexes [INFO] [stdout] 24 ~ con.hset::<_, _, _, ()>( [INFO] [stdout] 25 | &AgentKeys::by_user(account_id), [INFO] [stdout] ... [INFO] [stdout] 33 | println!("[CallableCache::agent_status_set] Agent is registered, adding to registered set"); [INFO] [stdout] 34 ~ con.sadd::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 35 | .await?; [INFO] [stdout] 36 | } else { [INFO] [stdout] 37 | println!("[CallableCache::agent_status_set] Agent is not registered, removing from registered set"); [INFO] [stdout] 38 ~ con.srem::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 39 | .await?; [INFO] [stdout] ... [INFO] [stdout] 44 | println!("[CallableCache::agent_status_set] Agent is available, adding to available set"); [INFO] [stdout] 45 ~ con.sadd::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] 46 | .await?; [INFO] [stdout] 47 | } else { [INFO] [stdout] 48 | println!("[CallableCache::agent_status_set] Agent is not available, removing from available set"); [INFO] [stdout] 49 ~ con.srem::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:87:5 [INFO] [stdout] | [INFO] [stdout] 87 | / pub async fn add_connected_agent( [INFO] [stdout] 88 | | &self, [INFO] [stdout] 89 | | account_id: &str, [INFO] [stdout] 90 | | user_id: &str, [INFO] [stdout] 91 | | agent_id: &str, [INFO] [stdout] 92 | | ws_connection_id: &str, [INFO] [stdout] 93 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | con.sadd(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 100 ~ con.sadd::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 101 | [INFO] [stdout] 102 | // Map WebSocket connection to account for routing [INFO] [stdout] 103 ~ con.hset::<_, _, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id, account_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:109:5 [INFO] [stdout] | [INFO] [stdout] 109 | / pub async fn remove_connected_agent( [INFO] [stdout] 110 | | &self, [INFO] [stdout] 111 | | account_id: &str, [INFO] [stdout] 112 | | user_id: &str, [INFO] [stdout] 113 | | agent_id: &str, [INFO] [stdout] 114 | | ws_connection_id: &str, [INFO] [stdout] 115 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:121:13 [INFO] [stdout] | [INFO] [stdout] 121 | con.srem(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 121 ~ con.srem::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 122 | [INFO] [stdout] 123 | // Remove WebSocket mapping [INFO] [stdout] 124 ~ con.hdel::<_, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn queue_group_set(&self, queue: &QueueGroup) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 17 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 18 | [INFO] [stdout] 19 | // Track in active queues [INFO] [stdout] 20 ~ con.sadd::<_, _, ()>(&crate::constants::QueueKeys::active(&queue.account_id), &queue.name).await?; [INFO] [stdout] 21 | [INFO] [stdout] ... [INFO] [stdout] 29 | }); [INFO] [stdout] 30 ~ con.hset::<_, _, _, ()>(&meta_key, &queue.name, meta.to_string()).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | pub async fn queue_group_delete(&self, account_id: &str, queue_name: &str) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:68:13 [INFO] [stdout] | [INFO] [stdout] 68 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 68 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 69 | [INFO] [stdout] 70 | // Remove from active set [INFO] [stdout] 71 ~ con.srem::<_, _, ()>(&crate::constants::QueueKeys::active(account_id), queue_name).await?; [INFO] [stdout] 72 | [INFO] [stdout] 73 | // Remove metadata [INFO] [stdout] 74 | let meta_key = crate::constants::QueueKeys::metadata(account_id); [INFO] [stdout] 75 ~ con.hdel::<_, _, ()>(&meta_key, queue_name).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn session_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | session_data: &SessionData, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:29:17 [INFO] [stdout] | [INFO] [stdout] 29 | con.set_ex(&key, session_json, ttl).await?; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.set_ex::<_, _, ()>(&key, session_json, ttl).await?; [INFO] [stdout] 30 | [INFO] [stdout] 31 | // Track active sessions [INFO] [stdout] 32 ~ con.sadd::<_, _, ()>(&SessionKeys::active(account_id), &session_data.session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:130:5 [INFO] [stdout] | [INFO] [stdout] 130 | / pub async fn session_delete( [INFO] [stdout] 131 | | &self, [INFO] [stdout] 132 | | account_id: &str, [INFO] [stdout] 133 | | session_id: &str, [INFO] [stdout] 134 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:138:13 [INFO] [stdout] | [INFO] [stdout] 138 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 138 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 139 ~ con.srem::<_, _, ()>(&SessionKeys::active(account_id), session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/websocket.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 46 | / pub async fn publish_account_event( [INFO] [stdout] 47 | | &self, [INFO] [stdout] 48 | | account_id: &str, [INFO] [stdout] 49 | | event: &RedisEvent, [INFO] [stdout] 50 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/websocket.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | con.publish(&channel, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 57 | con.publish::<_, _, ()>(&channel, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/helpers.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | / pub async fn publish_event( [INFO] [stdout] 146 | | con: &mut MultiplexedConnection, [INFO] [stdout] 147 | | event: RedisEvent, [INFO] [stdout] 148 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/helpers.rs:158:9 [INFO] [stdout] | [INFO] [stdout] 158 | con.publish(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 158 | con.publish::<_, _, ()>(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_jambonz_entry(&self, entry: JambonzEntry) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:28:13 [INFO] [stdout] | [INFO] [stdout] 28 | con.hset(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 28 | con.hset::<_, _, _, ()>(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | +++++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:133:5 [INFO] [stdout] | [INFO] [stdout] 133 | pub async fn insert_jambonz_entries(&self, entries: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:151:14 [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_contact(&self, contact: Contact) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:29:13 [INFO] [stdout] | [INFO] [stdout] 29 | con.hset(&hash_key, &contact.id, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.hset::<_, _, _, ()>(&hash_key, &contact.id, value).await?; [INFO] [stdout] 30 | [INFO] [stdout] ... [INFO] [stdout] 34 | // Map primary phone to contact ID [INFO] [stdout] 35 ~ con.hset::<_, _, _, ()>(&idents_key, &contact.primary, &contact.id).await?; [INFO] [stdout] 36 | [INFO] [stdout] 37 | // Map secondary phone if exists [INFO] [stdout] 38 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 39 ~ con.hset::<_, _, _, ()>(&idents_key, secondary, &contact.id).await?; [INFO] [stdout] 40 | } [INFO] [stdout] ... [INFO] [stdout] 43 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 44 ~ con.hset::<_, _, _, ()>(&idents_key, tertiary, &contact.id).await?; [INFO] [stdout] 45 | } [INFO] [stdout] ... [INFO] [stdout] 48 | if let Some(ref email) = contact.email { [INFO] [stdout] 49 ~ con.hset::<_, _, _, ()>(&idents_key, email, &contact.id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:197:5 [INFO] [stdout] | [INFO] [stdout] 197 | / pub async fn delete_contact( [INFO] [stdout] 198 | | &self, [INFO] [stdout] 199 | | account_id: &str, [INFO] [stdout] 200 | | contact_id: &str, [INFO] [stdout] 201 | | ) -> Result { [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:213:17 [INFO] [stdout] | [INFO] [stdout] 213 | con.hdel(&idents_key, &contact.primary).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 213 ~ con.hdel::<_, _, ()>(&idents_key, &contact.primary).await?; [INFO] [stdout] 214 | [INFO] [stdout] 215 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 216 ~ con.hdel::<_, _, ()>(&idents_key, secondary).await?; [INFO] [stdout] 217 | } [INFO] [stdout] 218 | [INFO] [stdout] 219 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 220 ~ con.hdel::<_, _, ()>(&idents_key, tertiary).await?; [INFO] [stdout] 221 | } [INFO] [stdout] 222 | [INFO] [stdout] 223 | if let Some(ref email) = contact.email { [INFO] [stdout] 224 ~ con.hdel::<_, _, ()>(&idents_key, email).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:249:5 [INFO] [stdout] | [INFO] [stdout] 249 | pub async fn insert_contacts(&self, contacts: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:298:14 [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `insert_addresses` is never used [INFO] [stdout] --> src/account.rs:407:10 [INFO] [stdout] | [INFO] [stdout] 407 | async fn insert_addresses( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling cal-redis v0.1.80 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `deserialize_from_json` [INFO] [stdout] --> src/account.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | deserialize_from_json, get_hash_item, get_items, insert_items, serialize_to_json, [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: `Serialize` [INFO] [stdout] --> src/account.rs:16:35 [INFO] [stdout] | [INFO] [stdout] 16 | use serde::{de::DeserializeOwned, Serialize}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `UserLite` [INFO] [stdout] --> src/local_cache.rs:2:81 [INFO] [stdout] | [INFO] [stdout] 2 | use cal_core::{AccountLite, Asset, FlowState, Hook, Proxy, Region, Trunk, User, UserLite, DDI}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn agent_status_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | status: &AgentStatus, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:21:13 [INFO] [stdout] | [INFO] [stdout] 21 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] = note: `#[warn(dependency_on_unit_never_type_fallback)]` (part of `#[warn(rust_2024_compatibility)]`) on by default [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 21 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 22 | [INFO] [stdout] 23 | // Update indexes [INFO] [stdout] 24 ~ con.hset::<_, _, _, ()>( [INFO] [stdout] 25 | &AgentKeys::by_user(account_id), [INFO] [stdout] ... [INFO] [stdout] 33 | println!("[CallableCache::agent_status_set] Agent is registered, adding to registered set"); [INFO] [stdout] 34 ~ con.sadd::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 35 | .await?; [INFO] [stdout] 36 | } else { [INFO] [stdout] 37 | println!("[CallableCache::agent_status_set] Agent is not registered, removing from registered set"); [INFO] [stdout] 38 ~ con.srem::<_, _, ()>(&AgentKeys::registered(account_id), &status.user_id) [INFO] [stdout] 39 | .await?; [INFO] [stdout] ... [INFO] [stdout] 44 | println!("[CallableCache::agent_status_set] Agent is available, adding to available set"); [INFO] [stdout] 45 ~ con.sadd::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] 46 | .await?; [INFO] [stdout] 47 | } else { [INFO] [stdout] 48 | println!("[CallableCache::agent_status_set] Agent is not available, removing from available set"); [INFO] [stdout] 49 ~ con.srem::<_, _, ()>(&AgentKeys::available(account_id), &status.user_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:87:5 [INFO] [stdout] | [INFO] [stdout] 87 | / pub async fn add_connected_agent( [INFO] [stdout] 88 | | &self, [INFO] [stdout] 89 | | account_id: &str, [INFO] [stdout] 90 | | user_id: &str, [INFO] [stdout] 91 | | agent_id: &str, [INFO] [stdout] 92 | | ws_connection_id: &str, [INFO] [stdout] 93 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | con.sadd(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 100 ~ con.sadd::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 101 | [INFO] [stdout] 102 | // Map WebSocket connection to account for routing [INFO] [stdout] 103 ~ con.hset::<_, _, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id, account_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/agent.rs:109:5 [INFO] [stdout] | [INFO] [stdout] 109 | / pub async fn remove_connected_agent( [INFO] [stdout] 110 | | &self, [INFO] [stdout] 111 | | account_id: &str, [INFO] [stdout] 112 | | user_id: &str, [INFO] [stdout] 113 | | agent_id: &str, [INFO] [stdout] 114 | | ws_connection_id: &str, [INFO] [stdout] 115 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/agent.rs:121:13 [INFO] [stdout] | [INFO] [stdout] 121 | con.srem(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 121 ~ con.srem::<_, _, ()>(&AgentKeys::connected(account_id), &member).await?; [INFO] [stdout] 122 | [INFO] [stdout] 123 | // Remove WebSocket mapping [INFO] [stdout] 124 ~ con.hdel::<_, _, ()>(WS_CONNECTIONS_KEY, ws_connection_id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn queue_group_set(&self, queue: &QueueGroup) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | con.set(&key, json).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 17 ~ con.set::<_, _, ()>(&key, json).await?; [INFO] [stdout] 18 | [INFO] [stdout] 19 | // Track in active queues [INFO] [stdout] 20 ~ con.sadd::<_, _, ()>(&crate::constants::QueueKeys::active(&queue.account_id), &queue.name).await?; [INFO] [stdout] 21 | [INFO] [stdout] ... [INFO] [stdout] 29 | }); [INFO] [stdout] 30 ~ con.hset::<_, _, _, ()>(&meta_key, &queue.name, meta.to_string()).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/queue.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | pub async fn queue_group_delete(&self, account_id: &str, queue_name: &str) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/queue.rs:68:13 [INFO] [stdout] | [INFO] [stdout] 68 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 68 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 69 | [INFO] [stdout] 70 | // Remove from active set [INFO] [stdout] 71 ~ con.srem::<_, _, ()>(&crate::constants::QueueKeys::active(account_id), queue_name).await?; [INFO] [stdout] 72 | [INFO] [stdout] 73 | // Remove metadata [INFO] [stdout] 74 | let meta_key = crate::constants::QueueKeys::metadata(account_id); [INFO] [stdout] 75 ~ con.hdel::<_, _, ()>(&meta_key, queue_name).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | / pub async fn session_set( [INFO] [stdout] 11 | | &self, [INFO] [stdout] 12 | | account_id: &str, [INFO] [stdout] 13 | | session_data: &SessionData, [INFO] [stdout] 14 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:29:17 [INFO] [stdout] | [INFO] [stdout] 29 | con.set_ex(&key, session_json, ttl).await?; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.set_ex::<_, _, ()>(&key, session_json, ttl).await?; [INFO] [stdout] 30 | [INFO] [stdout] 31 | // Track active sessions [INFO] [stdout] 32 ~ con.sadd::<_, _, ()>(&SessionKeys::active(account_id), &session_data.session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/session.rs:130:5 [INFO] [stdout] | [INFO] [stdout] 130 | / pub async fn session_delete( [INFO] [stdout] 131 | | &self, [INFO] [stdout] 132 | | account_id: &str, [INFO] [stdout] 133 | | session_id: &str, [INFO] [stdout] 134 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/session.rs:138:13 [INFO] [stdout] | [INFO] [stdout] 138 | con.del(&key).await?; [INFO] [stdout] | ^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 138 ~ con.del::<_, ()>(&key).await?; [INFO] [stdout] 139 ~ con.srem::<_, _, ()>(&SessionKeys::active(account_id), session_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/websocket.rs:46:5 [INFO] [stdout] | [INFO] [stdout] 46 | / pub async fn publish_account_event( [INFO] [stdout] 47 | | &self, [INFO] [stdout] 48 | | account_id: &str, [INFO] [stdout] 49 | | event: &RedisEvent, [INFO] [stdout] 50 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/websocket.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | con.publish(&channel, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 57 | con.publish::<_, _, ()>(&channel, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/helpers.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | / pub async fn publish_event( [INFO] [stdout] 146 | | con: &mut MultiplexedConnection, [INFO] [stdout] 147 | | event: RedisEvent, [INFO] [stdout] 148 | | ) -> Result<(), RedisError> { [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/helpers.rs:158:9 [INFO] [stdout] | [INFO] [stdout] 158 | con.publish(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 158 | con.publish::<_, _, ()>(GLOBAL_EVENTS_CHANNEL, event_json).await?; [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_jambonz_entry(&self, entry: JambonzEntry) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:28:13 [INFO] [stdout] | [INFO] [stdout] 28 | con.hset(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 28 | con.hset::<_, _, _, ()>(JAMBONZ_KEY, &entry.sip_realm, value).await?; [INFO] [stdout] | +++++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/jambonz.rs:133:5 [INFO] [stdout] | [INFO] [stdout] 133 | pub async fn insert_jambonz_entries(&self, entries: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/jambonz.rs:151:14 [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 151 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn insert_contact(&self, contact: Contact) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:29:13 [INFO] [stdout] | [INFO] [stdout] 29 | con.hset(&hash_key, &contact.id, value).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 29 ~ con.hset::<_, _, _, ()>(&hash_key, &contact.id, value).await?; [INFO] [stdout] 30 | [INFO] [stdout] ... [INFO] [stdout] 34 | // Map primary phone to contact ID [INFO] [stdout] 35 ~ con.hset::<_, _, _, ()>(&idents_key, &contact.primary, &contact.id).await?; [INFO] [stdout] 36 | [INFO] [stdout] 37 | // Map secondary phone if exists [INFO] [stdout] 38 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 39 ~ con.hset::<_, _, _, ()>(&idents_key, secondary, &contact.id).await?; [INFO] [stdout] 40 | } [INFO] [stdout] ... [INFO] [stdout] 43 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 44 ~ con.hset::<_, _, _, ()>(&idents_key, tertiary, &contact.id).await?; [INFO] [stdout] 45 | } [INFO] [stdout] ... [INFO] [stdout] 48 | if let Some(ref email) = contact.email { [INFO] [stdout] 49 ~ con.hset::<_, _, _, ()>(&idents_key, email, &contact.id).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:197:5 [INFO] [stdout] | [INFO] [stdout] 197 | / pub async fn delete_contact( [INFO] [stdout] 198 | | &self, [INFO] [stdout] 199 | | account_id: &str, [INFO] [stdout] 200 | | contact_id: &str, [INFO] [stdout] 201 | | ) -> Result { [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:213:17 [INFO] [stdout] | [INFO] [stdout] 213 | con.hdel(&idents_key, &contact.primary).await?; [INFO] [stdout] | ^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 213 ~ con.hdel::<_, _, ()>(&idents_key, &contact.primary).await?; [INFO] [stdout] 214 | [INFO] [stdout] 215 | if let Some(ref secondary) = contact.secondary { [INFO] [stdout] 216 ~ con.hdel::<_, _, ()>(&idents_key, secondary).await?; [INFO] [stdout] 217 | } [INFO] [stdout] 218 | [INFO] [stdout] 219 | if let Some(ref tertiary) = contact.tertiary { [INFO] [stdout] 220 ~ con.hdel::<_, _, ()>(&idents_key, tertiary).await?; [INFO] [stdout] 221 | } [INFO] [stdout] 222 | [INFO] [stdout] 223 | if let Some(ref email) = contact.email { [INFO] [stdout] 224 ~ con.hdel::<_, _, ()>(&idents_key, email).await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function depends on never type fallback being `()` [INFO] [stdout] --> src/cache/contact.rs:249:5 [INFO] [stdout] | [INFO] [stdout] 249 | pub async fn insert_contacts(&self, contacts: Vec) -> Result<(), RedisError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = help: specify the types explicitly [INFO] [stdout] note: in edition 2024, the requirement `!: FromRedisValue` will fail [INFO] [stdout] --> src/cache/contact.rs:298:14 [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async(&mut con).await?; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] help: use `()` annotations to avoid fallback changes [INFO] [stdout] | [INFO] [stdout] 298 | pipe.query_async::<()>(&mut con).await?; [INFO] [stdout] | ++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `insert_addresses` is never used [INFO] [stdout] --> src/account.rs:407:10 [INFO] [stdout] | [INFO] [stdout] 407 | async fn insert_addresses( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 13.12s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: cal-redis v0.1.80 (/opt/rustwide/workdir) [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 3` [INFO] running `Command { std: "docker" "inspect" "8817fe9d2cbee9d751ee133a78fe4bbd367a3610ab41e03ece0ea60d5f17ab4d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8817fe9d2cbee9d751ee133a78fe4bbd367a3610ab41e03ece0ea60d5f17ab4d", kill_on_drop: false }` [INFO] [stdout] 8817fe9d2cbee9d751ee133a78fe4bbd367a3610ab41e03ece0ea60d5f17ab4d