diff --git a/Cargo.lock b/Cargo.lock index 7e5567642..7832890bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2075,7 +2075,6 @@ dependencies = [ "mongocrypt", "mongodb-internal-macros", "num_cpus", - "once_cell", "openssl", "openssl-probe", "pbkdf2 0.11.0", diff --git a/Cargo.toml b/Cargo.toml index 0ea2ae2cf..4c199e2e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,7 +91,6 @@ hex = "0.4.0" hickory-proto = { version = "0.24.2", optional = true } hickory-resolver = { version = "0.24.2", optional = true } hmac = "0.12.1" -once_cell = "1.19.0" log = { version = "0.4.17", optional = true } md-5 = "0.10.1" mongodb-internal-macros = { path = "macros", version = "3.3.0" } diff --git a/benchmarks/Cargo.lock b/benchmarks/Cargo.lock index 404b076f2..cd472004a 100644 --- a/benchmarks/Cargo.lock +++ b/benchmarks/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -118,12 +118,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -165,17 +159,19 @@ dependencies = [ [[package]] name = "bson" -version = "2.13.0" -source = "git+https://github.com/mongodb/bson-rust?branch=main#098e1a17e34cbe7f28aac87609eeea2a191b93a3" +version = "2.15.0" +source = "git+https://github.com/mongodb/bson-rust?branch=2.15.x#f6f163095b5159ce175424b0e02f9bd7acfaddf2" dependencies = [ "ahash", - "base64 0.13.1", + "base64 0.22.1", "bitvec", + "getrandom 0.2.15", + "getrandom 0.3.3", "hex", "indexmap 2.7.1", "js-sys", "once_cell", - "rand", + "rand 0.9.2", "serde", "serde_bytes", "serde_json", @@ -272,7 +268,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] @@ -573,8 +569,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasi 0.14.7+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -632,7 +644,7 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand", + "rand 0.8.5", "thiserror", "tinyvec", "tokio", @@ -653,7 +665,7 @@ dependencies = [ "lru-cache", "once_cell", "parking_lot", - "rand", + "rand 0.8.5", "resolv-conf", "smallvec", "thiserror", @@ -1052,13 +1064,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] +[[package]] +name = "mongocrypt" +version = "0.3.1" +source = "git+https://github.com/mongodb/libmongocrypt-rust.git?branch=main#132757496c04007b0482f9014dbc616553f1f916" +dependencies = [ + "bson", + "mongocrypt-sys", + "once_cell", + "serde", +] + +[[package]] +name = "mongocrypt-sys" +version = "0.1.4+1.12.0" +source = "git+https://github.com/mongodb/libmongocrypt-rust.git?branch=main#132757496c04007b0482f9014dbc616553f1f916" + [[package]] name = "mongodb" -version = "3.2.0" +version = "3.3.0" dependencies = [ "async-trait", "base64 0.13.1", @@ -1077,18 +1105,18 @@ dependencies = [ "hmac", "macro_magic", "md-5", + "mongocrypt", "mongodb-internal-macros", - "once_cell", "pbkdf2", "percent-encoding", - "rand", + "rand 0.8.5", "rustc_version_runtime", "rustls", - "rustls-pemfile", + "rustversion", "serde", "serde_bytes", "serde_with", - "sha-1", + "sha1", "sha2", "socket2", "stringprep", @@ -1100,12 +1128,12 @@ dependencies = [ "tokio-util", "typed-builder", "uuid", - "webpki-roots", + "webpki-roots 0.26.11", ] [[package]] name = "mongodb-internal-macros" -version = "3.2.0" +version = "3.3.0" dependencies = [ "macro_magic", "proc-macro2", @@ -1269,6 +1297,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "radium" version = "0.7.0" @@ -1282,8 +1316,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -1293,7 +1337,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -1302,7 +1356,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", ] [[package]] @@ -1361,7 +1424,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -1380,7 +1443,6 @@ dependencies = [ "indicatif", "mongodb", "num_enum", - "once_cell", "serde", "serde_json", "tokio", @@ -1415,40 +1477,44 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "base64 0.21.7", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.103.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -1462,16 +1528,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "semver" version = "1.0.25" @@ -1551,10 +1607,10 @@ dependencies = [ ] [[package]] -name = "sha-1" -version = "0.10.1" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -1822,9 +1878,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ "rustls", "tokio", @@ -1905,13 +1961,22 @@ dependencies = [ [[package]] name = "typed-builder" -version = "0.10.0" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" +checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.96", ] [[package]] @@ -1994,8 +2059,9 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", + "wasm-bindgen", ] [[package]] @@ -2016,6 +2082,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -2076,9 +2160,21 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.2", +] + +[[package]] +name = "webpki-roots" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "widestring" @@ -2284,6 +2380,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + [[package]] name = "write16" version = "1.0.0" @@ -2371,6 +2473,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zerovec" version = "0.10.4" diff --git a/benchmarks/Cargo.toml b/benchmarks/Cargo.toml index ad00100e5..2cda221a4 100644 --- a/benchmarks/Cargo.toml +++ b/benchmarks/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [dependencies] mongodb = { path = ".." } serde_json = "1.0.59" -once_cell = "1.19.0" clap = "2.33.3" indicatif = "0.15.0" async-trait = "0.1.41" diff --git a/benchmarks/src/bench.rs b/benchmarks/src/bench.rs index f597873f2..b448254eb 100644 --- a/benchmarks/src/bench.rs +++ b/benchmarks/src/bench.rs @@ -27,31 +27,31 @@ use mongodb::{ options::{Acknowledgment, ClientOptions, SelectionCriteria, WriteConcern}, Client, }; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use serde_json::Value; use crate::fs::{BufReader, File}; -static DATABASE_NAME: Lazy = Lazy::new(|| { +static DATABASE_NAME: LazyLock = LazyLock::new(|| { option_env!("DATABASE_NAME") .unwrap_or("perftest") .to_string() }); -static COLL_NAME: Lazy = - Lazy::new(|| option_env!("COLL_NAME").unwrap_or("corpus").to_string()); -static MAX_EXECUTION_TIME: Lazy = Lazy::new(|| { +static COLL_NAME: LazyLock = + LazyLock::new(|| option_env!("COLL_NAME").unwrap_or("corpus").to_string()); + static MAX_EXECUTION_TIME: LazyLock = LazyLock::new(|| { option_env!("MAX_EXECUTION_TIME") .unwrap_or("300") .parse::() .expect("invalid MAX_EXECUTION_TIME") }); -static MIN_EXECUTION_TIME: Lazy = Lazy::new(|| { + static MIN_EXECUTION_TIME: LazyLock = LazyLock::new(|| { option_env!("MIN_EXECUTION_TIME") .unwrap_or("60") .parse::() .expect("invalid MIN_EXECUTION_TIME") }); -pub static TARGET_ITERATION_COUNT: Lazy = Lazy::new(|| { + pub static TARGET_ITERATION_COUNT: LazyLock = LazyLock::new(|| { option_env!("TARGET_ITERATION_COUNT") .unwrap_or("100") .parse::() diff --git a/benchmarks/src/bench/bulk_write.rs b/benchmarks/src/bench/bulk_write.rs index 3fda57d9c..dc41e4b83 100644 --- a/benchmarks/src/bench/bulk_write.rs +++ b/benchmarks/src/bench/bulk_write.rs @@ -5,7 +5,7 @@ use mongodb::{ Client, Namespace, }; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use super::{drop_database, Benchmark, COLL_NAME, DATABASE_NAME}; @@ -71,8 +71,8 @@ impl Benchmark for InsertBulkWriteBenchmark { } } -static COLLECTION_NAMES: Lazy> = - Lazy::new(|| (1..=10).map(|i| format!("corpus_{}", i)).collect()); +static COLLECTION_NAMES: LazyLock> = + LazyLock::new(|| (1..=10).map(|i| format!("corpus_{}", i)).collect()); pub struct MixedBulkWriteBenchmark { client: Client, diff --git a/benchmarks/src/bench/gridfs_multi_download.rs b/benchmarks/src/bench/gridfs_multi_download.rs index 10331d22f..f1c19abcb 100644 --- a/benchmarks/src/bench/gridfs_multi_download.rs +++ b/benchmarks/src/bench/gridfs_multi_download.rs @@ -6,15 +6,15 @@ use std::{ use anyhow::{Context, Result}; use futures::AsyncWriteExt; use mongodb::{bson::Bson, gridfs::GridFsBucket, Client}; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use crate::{ bench::{drop_database, Benchmark, DATABASE_NAME}, fs::{open_async_read_compat, open_async_write_compat}, }; -static DOWNLOAD_PATH: Lazy = - Lazy::new(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("gridfs_multi_download")); +static DOWNLOAD_PATH: LazyLock = + LazyLock::new(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("gridfs_multi_download")); pub struct GridFsMultiDownloadBenchmark { uri: String, diff --git a/benchmarks/src/data.rs b/benchmarks/src/data.rs index a8693dbc3..e1b9e97ca 100644 --- a/benchmarks/src/data.rs +++ b/benchmarks/src/data.rs @@ -4,11 +4,11 @@ use std::{ }; use mongodb::bson::Document; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use tokio::sync::OnceCell; -pub static DATA_PATH: Lazy = - Lazy::new(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("data")); +pub static DATA_PATH: LazyLock = + LazyLock::new(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("data")); async fn get_data(once_cell: &OnceCell, path: &[&str]) -> Document { once_cell diff --git a/src/client/auth/scram.rs b/src/client/auth/scram.rs index 24e48607d..8ad1b1915 100644 --- a/src/client/auth/scram.rs +++ b/src/client/auth/scram.rs @@ -12,9 +12,9 @@ use hmac::{ Mac, }; use md5::Md5; -use once_cell::sync::Lazy; use sha1::Sha1; use sha2::Sha256; +use std::sync::LazyLock; use tokio::sync::RwLock; use crate::{ @@ -50,8 +50,8 @@ const NO_CHANNEL_BINDING: char = 'n'; const MIN_ITERATION_COUNT: u32 = 4096; /// Cache of pre-computed salted passwords. -static CREDENTIAL_CACHE: Lazy>>> = - Lazy::new(|| RwLock::new(HashMap::new())); +static CREDENTIAL_CACHE: LazyLock>>> = + LazyLock::new(|| RwLock::new(HashMap::new())); #[derive(Hash, Eq, PartialEq)] struct CacheEntry { diff --git a/src/client/auth/test.rs b/src/client/auth/test.rs index d707fa0f3..270090c4d 100644 --- a/src/client/auth/test.rs +++ b/src/client/auth/test.rs @@ -1,10 +1,10 @@ -use once_cell::sync::Lazy; +use std::sync::LazyLock; use crate::{cmap::StreamDescription, options::AuthMechanism}; use super::sasl::SaslStart; -static MECHS: Lazy<[String; 2]> = Lazy::new(|| { +static MECHS: LazyLock<[String; 2]> = LazyLock::new(|| { [ AuthMechanism::ScramSha1.as_str().to_string(), AuthMechanism::ScramSha256.as_str().to_string(), diff --git a/src/client/executor.rs b/src/client/executor.rs index 0cfaa5092..41ab72c2e 100644 --- a/src/client/executor.rs +++ b/src/client/executor.rs @@ -3,8 +3,8 @@ use crate::bson::RawDocumentBuf; use crate::bson::{doc, RawBsonRef, RawDocument, Timestamp}; #[cfg(feature = "in-use-encryption")] use futures_core::future::BoxFuture; -use once_cell::sync::Lazy; use serde::de::DeserializeOwned; +use std::sync::LazyLock; use std::{ borrow::BorrowMut, @@ -65,7 +65,7 @@ use crate::{ ClusterTime, }; -pub(crate) static REDACTED_COMMANDS: Lazy> = Lazy::new(|| { +pub(crate) static REDACTED_COMMANDS: LazyLock> = LazyLock::new(|| { let mut hash_set = HashSet::new(); hash_set.insert("authenticate"); hash_set.insert("saslstart"); @@ -78,7 +78,7 @@ pub(crate) static REDACTED_COMMANDS: Lazy> = Lazy::new(|| hash_set.insert("copydb"); hash_set }); -pub(crate) static HELLO_COMMAND_NAMES: Lazy> = Lazy::new(|| { +pub(crate) static HELLO_COMMAND_NAMES: LazyLock> = LazyLock::new(|| { let mut hash_set = HashSet::new(); hash_set.insert("hello"); hash_set.insert(LEGACY_HELLO_COMMAND_NAME_LOWERCASE); diff --git a/src/client/options.rs b/src/client/options.rs index f6491eea5..0405fe930 100644 --- a/src/client/options.rs +++ b/src/client/options.rs @@ -20,9 +20,9 @@ use std::{ use crate::bson::UuidRepresentation; use derive_where::derive_where; use macro_magic::export_tokens; -use once_cell::sync::Lazy; use serde::{de::Unexpected, Deserialize, Deserializer, Serialize}; use serde_with::skip_serializing_none; +use std::sync::LazyLock; use strsim::jaro_winkler; use typed_builder::TypedBuilder; @@ -101,11 +101,11 @@ const URI_OPTIONS: &[&str] = &[ /// Reserved characters as defined by [Section 2.2 of RFC-3986](https://tools.ietf.org/html/rfc3986#section-2.2). /// Usernames / passwords that contain these characters must instead include the URL encoded version /// of them when included as part of the connection string. -static USERINFO_RESERVED_CHARACTERS: Lazy> = - Lazy::new(|| [':', '/', '?', '#', '[', ']', '@'].iter().collect()); +static USERINFO_RESERVED_CHARACTERS: LazyLock> = + LazyLock::new(|| [':', '/', '?', '#', '[', ']', '@'].iter().collect()); -static ILLEGAL_DATABASE_CHARACTERS: Lazy> = - Lazy::new(|| ['/', '\\', ' ', '"', '$'].iter().collect()); +static ILLEGAL_DATABASE_CHARACTERS: LazyLock> = + LazyLock::new(|| ['/', '\\', ' ', '"', '$'].iter().collect()); /// An enum representing the address of a MongoDB server. #[derive(Clone, Debug, Eq, Serialize)] diff --git a/src/client/options/test.rs b/src/client/options/test.rs index d3f6a3248..cf03f50f6 100644 --- a/src/client/options/test.rs +++ b/src/client/options/test.rs @@ -1,9 +1,9 @@ use std::time::Duration; use crate::bson::UuidRepresentation; -use once_cell::sync::Lazy; use pretty_assertions::assert_eq; use serde::Deserialize; +use std::sync::LazyLock; use crate::{ bson::{Bson, Document}, @@ -15,7 +15,7 @@ use crate::{ Client, }; -static SKIPPED_TESTS: Lazy> = Lazy::new(|| { +static SKIPPED_TESTS: LazyLock> = LazyLock::new(|| { let mut skipped_tests = vec![ // TODO RUST-1309: unskip this test "tlsInsecure is parsed correctly", diff --git a/src/client/session.rs b/src/client/session.rs index ca463ec03..88416e08b 100644 --- a/src/client/session.rs +++ b/src/client/session.rs @@ -10,7 +10,7 @@ use std::{ time::{Duration, Instant}, }; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use uuid::Uuid; use crate::{ @@ -27,12 +27,13 @@ pub(super) use pool::ServerSessionPool; use super::{options::ServerAddress, AsyncDropToken}; -pub(crate) static SESSIONS_UNSUPPORTED_COMMANDS: Lazy> = Lazy::new(|| { - let mut hash_set = HashSet::new(); - hash_set.insert("killcursors"); - hash_set.insert("parallelcollectionscan"); - hash_set -}); +pub(crate) static SESSIONS_UNSUPPORTED_COMMANDS: LazyLock> = + LazyLock::new(|| { + let mut hash_set = HashSet::new(); + hash_set.insert("killcursors"); + hash_set.insert("parallelcollectionscan"); + hash_set + }); /// A MongoDB client session. This struct represents a logical session used for ordering sequential /// operations. To create a `ClientSession`, call `start_session` on a `Client`. diff --git a/src/cmap/establish/handshake.rs b/src/cmap/establish/handshake.rs index 8df43ad59..273047823 100644 --- a/src/cmap/establish/handshake.rs +++ b/src/cmap/establish/handshake.rs @@ -8,7 +8,7 @@ use crate::{ bson_compat::cstr, options::{AuthOptions, ClientOptions}, }; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use tokio::sync::broadcast; #[cfg(any( @@ -272,26 +272,27 @@ impl FaasEnvironmentName { /// Contains the basic handshake information that can be statically determined. This document /// (potentially with additional fields added) can be cloned and put in the `client` field of /// the `hello` or legacy hello command. -pub(crate) static BASE_CLIENT_METADATA: Lazy = Lazy::new(|| ClientMetadata { - application: None, - driver: DriverMetadata { - name: "mongo-rust-driver".into(), - version: env!("CARGO_PKG_VERSION").into(), - }, - os: OsMetadata { - os_type: std::env::consts::OS.into(), - architecture: Some(std::env::consts::ARCH.into()), - name: None, - version: None, - }, - platform: format!( - "{} with {} / bson-{}", - rustc_version_runtime::version_meta().short_version_string, - RUNTIME_NAME, - if cfg!(feature = "bson-3") { "3" } else { "2" }, - ), - env: None, -}); +pub(crate) static BASE_CLIENT_METADATA: LazyLock = + LazyLock::new(|| ClientMetadata { + application: None, + driver: DriverMetadata { + name: "mongo-rust-driver".into(), + version: env!("CARGO_PKG_VERSION").into(), + }, + os: OsMetadata { + os_type: std::env::consts::OS.into(), + architecture: Some(std::env::consts::ARCH.into()), + name: None, + version: None, + }, + platform: format!( + "{} with {} / bson-{}", + rustc_version_runtime::version_meta().short_version_string, + RUNTIME_NAME, + if cfg!(feature = "bson-3") { "3" } else { "2" }, + ), + env: None, + }); type Truncation = fn(&mut ClientMetadata); diff --git a/src/sdam/srv_polling/test.rs b/src/sdam/srv_polling/test.rs index 646a458b9..26fd00931 100644 --- a/src/sdam/srv_polling/test.rs +++ b/src/sdam/srv_polling/test.rs @@ -1,7 +1,7 @@ use std::{collections::HashSet, time::Duration}; -use once_cell::sync::Lazy; use pretty_assertions::assert_eq; +use std::sync::LazyLock; use super::{LookupHosts, SrvPollingMonitor}; use crate::{ @@ -18,7 +18,7 @@ fn localhost_test_build_10gen(port: u16) -> ServerAddress { } } -static DEFAULT_HOSTS: Lazy> = Lazy::new(|| { +static DEFAULT_HOSTS: LazyLock> = LazyLock::new(|| { vec![ localhost_test_build_10gen(27017), localhost_test_build_10gen(27108), diff --git a/src/sync.rs b/src/sync.rs index 7b4d18a75..78a28586e 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -17,8 +17,8 @@ pub use cursor::{Cursor, SessionCursor, SessionCursorIter}; pub use db::Database; #[cfg(feature = "sync")] -pub(crate) static TOKIO_RUNTIME: once_cell::sync::Lazy = - once_cell::sync::Lazy::new(|| match tokio::runtime::Runtime::new() { +pub(crate) static TOKIO_RUNTIME: std::sync::LazyLock = + std::sync::LazyLock::new(|| match tokio::runtime::Runtime::new() { Ok(runtime) => runtime, Err(err) => panic!("Error occurred when starting the underlying async runtime: {err}"), }); diff --git a/src/sync/test.rs b/src/sync/test.rs index d99f15ccf..e351497d3 100644 --- a/src/sync/test.rs +++ b/src/sync/test.rs @@ -3,9 +3,9 @@ use std::{ io::{Read, Write}, }; -use once_cell::sync::Lazy; use pretty_assertions::assert_eq; use serde::{Deserialize, Serialize}; +use std::sync::LazyLock; use crate::{ bson::{doc, Document}, @@ -40,7 +40,7 @@ fn init_db_and_typed_coll( coll } -static CLIENT_OPTIONS: Lazy = Lazy::new(|| { +static CLIENT_OPTIONS: LazyLock = LazyLock::new(|| { crate::sync::TOKIO_RUNTIME.block_on(async { crate::test::get_client_options().await.clone() }) }); diff --git a/src/test.rs b/src/test.rs index f9de13f0e..9bfe66deb 100644 --- a/src/test.rs +++ b/src/test.rs @@ -49,7 +49,7 @@ pub(crate) use self::{ use futures::FutureExt; use home::home_dir; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use tokio::sync::OnceCell; #[cfg(feature = "tracing-unstable")] @@ -259,9 +259,9 @@ pub(crate) async fn streaming_monitor_protocol_supported() -> bool { .is_some() } -pub(crate) static DEFAULT_URI: Lazy = Lazy::new(get_default_uri); -pub(crate) static SERVER_API: Lazy> = - Lazy::new(|| match std::env::var("MONGODB_API_VERSION") { +pub(crate) static DEFAULT_URI: LazyLock = LazyLock::new(get_default_uri); +pub(crate) static SERVER_API: LazyLock> = + LazyLock::new(|| match std::env::var("MONGODB_API_VERSION") { Ok(server_api_version) if !server_api_version.is_empty() => Some(ServerApi { version: ServerApiVersion::from_str(server_api_version.as_str()).unwrap(), deprecation_errors: None, @@ -269,12 +269,12 @@ pub(crate) static SERVER_API: Lazy> = }), _ => None, }); -pub(crate) static LOAD_BALANCED_SINGLE_URI: Lazy> = - Lazy::new(|| std::env::var("SINGLE_MONGOS_LB_URI").ok()); -pub(crate) static LOAD_BALANCED_MULTIPLE_URI: Lazy> = - Lazy::new(|| std::env::var("MULTI_MONGOS_LB_URI").ok()); -pub(crate) static OIDC_URI: Lazy> = - Lazy::new(|| std::env::var("MONGODB_URI_SINGLE").ok()); +pub(crate) static LOAD_BALANCED_SINGLE_URI: LazyLock> = + LazyLock::new(|| std::env::var("SINGLE_MONGOS_LB_URI").ok()); +pub(crate) static LOAD_BALANCED_MULTIPLE_URI: LazyLock> = + LazyLock::new(|| std::env::var("MULTI_MONGOS_LB_URI").ok()); +pub(crate) static OIDC_URI: LazyLock> = + LazyLock::new(|| std::env::var("MONGODB_URI_SINGLE").ok()); // conditional definitions do not work within the lazy_static! macro, so this // needs to be defined separately. @@ -287,7 +287,7 @@ pub(crate) static OIDC_URI: Lazy> = /// Its minimum severity levels can be configured on a per-component basis using /// [`TracingHandler:set_levels`]. The test lock MUST be acquired exclusively in /// any test that will use the handler to avoid mixing events from multiple tests. -pub(crate) static DEFAULT_GLOBAL_TRACING_HANDLER: Lazy = Lazy::new(|| { +pub(crate) static DEFAULT_GLOBAL_TRACING_HANDLER: LazyLock = LazyLock::new(|| { let handler = TracingHandler::new(); tracing::subscriber::set_global_default(handler.clone()) .expect("setting global default tracing subscriber failed"); diff --git a/src/test/coll.rs b/src/test/coll.rs index 38a00cab0..282f5dfec 100644 --- a/src/test/coll.rs +++ b/src/test/coll.rs @@ -1,8 +1,8 @@ use std::{fmt::Debug, time::Duration}; use futures::stream::{StreamExt, TryStreamExt}; -use once_cell::sync::Lazy; use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use std::sync::LazyLock; use crate::{ bson::{doc, rawdoc, serde_helpers::HumanReadable, Bson, Document, RawDocumentBuf}, @@ -317,7 +317,7 @@ async fn no_kill_cursors_on_exhausted() { } #[allow(clippy::unreadable_literal)] -static LARGE_DOC: Lazy = Lazy::new(|| { +static LARGE_DOC: LazyLock = LazyLock::new(|| { doc! { "text": "the quick brown fox jumped over the lazy sheep dog", "in_reply_to_status_id": 22213321312i64, diff --git a/src/test/csfle.rs b/src/test/csfle.rs index 407f940f2..467746bb9 100644 --- a/src/test/csfle.rs +++ b/src/test/csfle.rs @@ -23,7 +23,7 @@ use std::{env, path::PathBuf}; use crate::bson::{doc, Document, RawBson}; use anyhow::Context; use mongocrypt::ctx::{Algorithm, KmsProvider, KmsProviderType}; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use crate::{ client_encryption::{ClientEncryption, EncryptKey}, @@ -41,29 +41,32 @@ pub(crate) type KmsProviderList = Vec; // The environment variables needed to run the CSFLE tests. These values can be retrieved from the // AWS secrets manager by running the setup-secrets.sh script in drivers-evergreen-tools. -static CSFLE_LOCAL_KEY: Lazy = Lazy::new(|| get_env_var("CSFLE_LOCAL_KEY")); -static FLE_AWS_KEY: Lazy = Lazy::new(|| get_env_var("FLE_AWS_KEY")); -static FLE_AWS_SECRET: Lazy = Lazy::new(|| get_env_var("FLE_AWS_SECRET")); -static FLE_AWS_TEMP_KEY: Lazy = Lazy::new(|| get_env_var("CSFLE_AWS_TEMP_ACCESS_KEY_ID")); -static FLE_AWS_TEMP_SECRET: Lazy = - Lazy::new(|| get_env_var("CSFLE_AWS_TEMP_SECRET_ACCESS_KEY")); -static FLE_AWS_TEMP_SESSION_TOKEN: Lazy = - Lazy::new(|| get_env_var("CSFLE_AWS_TEMP_SESSION_TOKEN")); -static FLE_AZURE_TENANTID: Lazy = Lazy::new(|| get_env_var("FLE_AZURE_TENANTID")); -static FLE_AZURE_CLIENTID: Lazy = Lazy::new(|| get_env_var("FLE_AZURE_CLIENTID")); -static FLE_AZURE_CLIENTSECRET: Lazy = Lazy::new(|| get_env_var("FLE_AZURE_CLIENTSECRET")); -static FLE_GCP_EMAIL: Lazy = Lazy::new(|| get_env_var("FLE_GCP_EMAIL")); -static FLE_GCP_PRIVATEKEY: Lazy = Lazy::new(|| get_env_var("FLE_GCP_PRIVATEKEY")); +static CSFLE_LOCAL_KEY: LazyLock = LazyLock::new(|| get_env_var("CSFLE_LOCAL_KEY")); +static FLE_AWS_KEY: LazyLock = LazyLock::new(|| get_env_var("FLE_AWS_KEY")); +static FLE_AWS_SECRET: LazyLock = LazyLock::new(|| get_env_var("FLE_AWS_SECRET")); +static FLE_AWS_TEMP_KEY: LazyLock = + LazyLock::new(|| get_env_var("CSFLE_AWS_TEMP_ACCESS_KEY_ID")); +static FLE_AWS_TEMP_SECRET: LazyLock = + LazyLock::new(|| get_env_var("CSFLE_AWS_TEMP_SECRET_ACCESS_KEY")); +static FLE_AWS_TEMP_SESSION_TOKEN: LazyLock = + LazyLock::new(|| get_env_var("CSFLE_AWS_TEMP_SESSION_TOKEN")); +static FLE_AZURE_TENANTID: LazyLock = LazyLock::new(|| get_env_var("FLE_AZURE_TENANTID")); +static FLE_AZURE_CLIENTID: LazyLock = LazyLock::new(|| get_env_var("FLE_AZURE_CLIENTID")); +static FLE_AZURE_CLIENTSECRET: LazyLock = + LazyLock::new(|| get_env_var("FLE_AZURE_CLIENTSECRET")); +static FLE_GCP_EMAIL: LazyLock = LazyLock::new(|| get_env_var("FLE_GCP_EMAIL")); +static FLE_GCP_PRIVATEKEY: LazyLock = LazyLock::new(|| get_env_var("FLE_GCP_PRIVATEKEY")); // Additional environment variables. These values should be set to the relevant local paths/ports. #[cfg(feature = "azure-kms")] -static AZURE_IMDS_MOCK_PORT: Lazy = Lazy::new(|| { +static AZURE_IMDS_MOCK_PORT: LazyLock = LazyLock::new(|| { get_env_var("AZURE_IMDS_MOCK_PORT") .parse() .expect("AZURE_IMDS_MOCK_PORT") }); -static CSFLE_TLS_CERT_DIR: Lazy = Lazy::new(|| get_env_var("CSFLE_TLS_CERT_DIR")); -static CRYPT_SHARED_LIB_PATH: Lazy = Lazy::new(|| get_env_var("CRYPT_SHARED_LIB_PATH")); +static CSFLE_TLS_CERT_DIR: LazyLock = LazyLock::new(|| get_env_var("CSFLE_TLS_CERT_DIR")); +static CRYPT_SHARED_LIB_PATH: LazyLock = + LazyLock::new(|| get_env_var("CRYPT_SHARED_LIB_PATH")); fn get_env_var(name: &str) -> String { match std::env::var(name) { @@ -77,7 +80,7 @@ fn get_env_var(name: &str) -> String { } } -pub(crate) static AWS_KMS: Lazy = Lazy::new(|| { +pub(crate) static AWS_KMS: LazyLock = LazyLock::new(|| { ( KmsProvider::aws(), doc! { @@ -87,7 +90,7 @@ pub(crate) static AWS_KMS: Lazy = Lazy::new(|| { None, ) }); -static AWS_TEMP_KMS: Lazy = Lazy::new(|| { +static AWS_TEMP_KMS: LazyLock = LazyLock::new(|| { ( KmsProvider::aws(), doc! { @@ -98,11 +101,11 @@ static AWS_TEMP_KMS: Lazy = Lazy::new(|| { None, ) }); -pub(crate) static AWS_KMS_NAME1: Lazy = Lazy::new(|| { +pub(crate) static AWS_KMS_NAME1: LazyLock = LazyLock::new(|| { let aws_info = AWS_KMS.clone(); (aws_info.0.with_name("name1"), aws_info.1, aws_info.2) }); -pub(crate) static AWS_KMS_NAME2: Lazy = Lazy::new(|| { +pub(crate) static AWS_KMS_NAME2: LazyLock = LazyLock::new(|| { ( KmsProvider::aws().with_name("name2"), doc! { @@ -112,7 +115,7 @@ pub(crate) static AWS_KMS_NAME2: Lazy = Lazy::new(|| { None, ) }); -pub(crate) static AZURE_KMS: Lazy = Lazy::new(|| { +pub(crate) static AZURE_KMS: LazyLock = LazyLock::new(|| { ( KmsProvider::azure(), doc! { @@ -123,11 +126,11 @@ pub(crate) static AZURE_KMS: Lazy = Lazy::new(|| { None, ) }); -pub(crate) static AZURE_KMS_NAME1: Lazy = Lazy::new(|| { +pub(crate) static AZURE_KMS_NAME1: LazyLock = LazyLock::new(|| { let azure_info = AZURE_KMS.clone(); (azure_info.0.with_name("name1"), azure_info.1, azure_info.2) }); -pub(crate) static GCP_KMS: Lazy = Lazy::new(|| { +pub(crate) static GCP_KMS: LazyLock = LazyLock::new(|| { ( KmsProvider::gcp(), doc! { @@ -137,11 +140,11 @@ pub(crate) static GCP_KMS: Lazy = Lazy::new(|| { None, ) }); -pub(crate) static GCP_KMS_NAME1: Lazy = Lazy::new(|| { +pub(crate) static GCP_KMS_NAME1: LazyLock = LazyLock::new(|| { let gcp_info = GCP_KMS.clone(); (gcp_info.0.with_name("name1"), gcp_info.1, gcp_info.2) }); -pub(crate) static LOCAL_KMS: Lazy = Lazy::new(|| { +pub(crate) static LOCAL_KMS: LazyLock = LazyLock::new(|| { ( KmsProvider::local(), doc! { @@ -153,11 +156,11 @@ pub(crate) static LOCAL_KMS: Lazy = Lazy::new(|| { None, ) }); -pub(crate) static LOCAL_KMS_NAME1: Lazy = Lazy::new(|| { +pub(crate) static LOCAL_KMS_NAME1: LazyLock = LazyLock::new(|| { let local_info = LOCAL_KMS.clone(); (local_info.0.with_name("name1"), local_info.1, local_info.2) }); -pub(crate) static KMIP_KMS: Lazy = Lazy::new(|| { +pub(crate) static KMIP_KMS: LazyLock = LazyLock::new(|| { let cert_dir = PathBuf::from(&*CSFLE_TLS_CERT_DIR); let tls_options = TlsOptions::builder() .ca_file_path(cert_dir.join("ca.pem")) @@ -171,12 +174,12 @@ pub(crate) static KMIP_KMS: Lazy = Lazy::new(|| { Some(tls_options), ) }); -pub(crate) static KMIP_KMS_NAME1: Lazy = Lazy::new(|| { +pub(crate) static KMIP_KMS_NAME1: LazyLock = LazyLock::new(|| { let kmip_info = KMIP_KMS.clone(); (kmip_info.0.with_name("name1"), kmip_info.1, kmip_info.2) }); -pub(crate) static UNNAMED_KMS_PROVIDERS: Lazy = Lazy::new(|| { +pub(crate) static UNNAMED_KMS_PROVIDERS: LazyLock = LazyLock::new(|| { vec![ AWS_KMS.clone(), AZURE_KMS.clone(), @@ -185,7 +188,7 @@ pub(crate) static UNNAMED_KMS_PROVIDERS: Lazy = Lazy::new(|| { KMIP_KMS.clone(), ] }); -pub(crate) static NAME1_KMS_PROVIDERS: Lazy = Lazy::new(|| { +pub(crate) static NAME1_KMS_PROVIDERS: LazyLock = LazyLock::new(|| { vec![ AWS_KMS_NAME1.clone(), AZURE_KMS_NAME1.clone(), @@ -194,19 +197,19 @@ pub(crate) static NAME1_KMS_PROVIDERS: Lazy = Lazy::new(|| { KMIP_KMS_NAME1.clone(), ] }); -pub(crate) static ALL_KMS_PROVIDERS: Lazy = Lazy::new(|| { +pub(crate) static ALL_KMS_PROVIDERS: LazyLock = LazyLock::new(|| { let mut providers = UNNAMED_KMS_PROVIDERS.clone(); providers.extend(NAME1_KMS_PROVIDERS.clone()); providers.push(AWS_KMS_NAME2.clone()); providers }); -static EXTRA_OPTIONS: Lazy = - Lazy::new(|| doc! { "cryptSharedLibPath": &*CRYPT_SHARED_LIB_PATH }); -static KV_NAMESPACE: Lazy = - Lazy::new(|| Namespace::from_str("keyvault.datakeys").unwrap()); -static DISABLE_CRYPT_SHARED: Lazy = - Lazy::new(|| env::var("DISABLE_CRYPT_SHARED").is_ok_and(|s| s == "true")); +static EXTRA_OPTIONS: LazyLock = + LazyLock::new(|| doc! { "cryptSharedLibPath": &*CRYPT_SHARED_LIB_PATH }); +static KV_NAMESPACE: LazyLock = + LazyLock::new(|| Namespace::from_str("keyvault.datakeys").unwrap()); +static DISABLE_CRYPT_SHARED: LazyLock = + LazyLock::new(|| env::var("DISABLE_CRYPT_SHARED").is_ok_and(|s| s == "true")); async fn init_client() -> Result<(EventClient, Collection)> { let client = Client::for_test().monitor_events().await; diff --git a/src/test/spec/oidc.rs b/src/test/spec/oidc.rs index 895ee99b9..ab832ebdd 100644 --- a/src/test/spec/oidc.rs +++ b/src/test/spec/oidc.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use once_cell::sync::Lazy; +use std::sync::LazyLock; use tokio::sync::OnceCell; use crate::{ @@ -8,21 +8,23 @@ use crate::{ test::spec::unified_runner::{TestFile, TestFileEntity}, }; -static MONGODB_URI: Lazy = Lazy::new(|| get_env_var("MONGODB_URI")); -static MONGODB_URI_SINGLE: Lazy = Lazy::new(|| get_env_var("MONGODB_URI_SINGLE")); +static MONGODB_URI: LazyLock = LazyLock::new(|| get_env_var("MONGODB_URI")); +static MONGODB_URI_SINGLE: LazyLock = LazyLock::new(|| get_env_var("MONGODB_URI_SINGLE")); #[cfg(target_os = "linux")] -static MONGODB_URI_MULTI: Lazy = Lazy::new(|| get_env_var("MONGODB_URI_MULTI")); -static OIDC_DOMAIN: Lazy = Lazy::new(|| get_env_var("OIDC_DOMAIN")); -static OIDC_TOKEN_DIR: Lazy = Lazy::new(|| { +static MONGODB_URI_MULTI: LazyLock = LazyLock::new(|| get_env_var("MONGODB_URI_MULTI")); +static OIDC_DOMAIN: LazyLock = LazyLock::new(|| get_env_var("OIDC_DOMAIN")); +static OIDC_TOKEN_DIR: LazyLock = LazyLock::new(|| { std::env::var("OIDC_TOKEN_DIR") .unwrap_or_else(|_| "/tmp/tokens".to_string()) .into() }); #[cfg(target_os = "linux")] -static OIDC_TOKEN_FILE: Lazy = Lazy::new(|| get_env_var("OIDC_TOKEN_FILE")); -static TEST_USER_1_USERNAME: Lazy = Lazy::new(|| format!("test_user1@{}", *OIDC_DOMAIN)); +static OIDC_TOKEN_FILE: LazyLock = LazyLock::new(|| get_env_var("OIDC_TOKEN_FILE")); +static TEST_USER_1_USERNAME: LazyLock = + LazyLock::new(|| format!("test_user1@{}", *OIDC_DOMAIN)); #[cfg(target_os = "linux")] -static TEST_USER_2_USERNAME: Lazy = Lazy::new(|| format!("test_user2@{}", *OIDC_DOMAIN)); +static TEST_USER_2_USERNAME: LazyLock = + LazyLock::new(|| format!("test_user2@{}", *OIDC_DOMAIN)); async fn get_access_token_test_user(once_cell: &'static OnceCell, user_n: u8) -> String { once_cell diff --git a/src/test/spec/unified_runner/matcher.rs b/src/test/spec/unified_runner/matcher.rs index 9306fcc1b..ac8612673 100644 --- a/src/test/spec/unified_runner/matcher.rs +++ b/src/test/spec/unified_runner/matcher.rs @@ -79,8 +79,8 @@ pub(crate) fn tracing_events_match( } } - use once_cell::sync::Lazy; use regex::Regex; + use std::sync::LazyLock; if let Some(failure_should_be_redacted) = expected.failure_is_redacted { match actual.fields.get("failure") { @@ -90,13 +90,13 @@ pub(crate) fn tracing_events_match( // `Lazy` saves us having to recompile this regex every time this // function is called. - static COMMAND_FAILED_REGEX: Lazy = Lazy::new(|| { + static COMMAND_FAILED_REGEX: LazyLock = LazyLock::new(|| { Regex::new( r"^Kind: Command failed: Error code (?P\d+) \((?P.+)\): (?P.+)+, labels: (?P.+)$" ).unwrap() }); - static IO_ERROR_REGEX: Lazy = Lazy::new(|| { + static IO_ERROR_REGEX: LazyLock = LazyLock::new(|| { Regex::new( r"^Kind: I/O error: (?P.+), labels: (?P.+)$", )