From fb3f2541663e5407199cc14cef367870aae053a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 15:11:04 +0100 Subject: [PATCH 01/28] Sqlx-core: rename async_io dependency for async-std --- sqlx-core/Cargo.toml | 4 ++-- sqlx-core/src/net/socket/mod.rs | 4 ++-- sqlx-core/src/rt/rt_async_std/socket.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index dcd8083023..48603261bb 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -19,7 +19,7 @@ any = [] json = ["serde", "serde_json"] # for conditional compilation -_rt-async-std = ["async-std", "async-io"] +_rt-async-std = ["async-std", "async-io-std"] _rt-tokio = ["tokio", "tokio-stream"] _tls-native-tls = ["native-tls"] _tls-rustls-aws-lc-rs = ["_tls-rustls", "rustls/aws-lc-rs", "webpki-roots"] @@ -52,7 +52,7 @@ ipnetwork = { workspace = true, optional = true } mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } -async-io = { version = "1.9.0", optional = true } +async-io-std = { package = "async-io", version = "1.9.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" chrono = { version = "0.4.34", default-features = false, features = ["clock"], optional = true } diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index d11f15884e..7981d1a56c 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -204,7 +204,7 @@ pub async fn connect_tcp( #[cfg(feature = "_rt-async-std")] { - use async_io::Async; + use async_io_std::Async; use async_std::net::ToSocketAddrs; use std::net::TcpStream; @@ -262,7 +262,7 @@ pub async fn connect_uds, Ws: WithSocket>( #[cfg(feature = "_rt-async-std")] { - use async_io::Async; + use async_io_std::Async; use std::os::unix::net::UnixStream; let stream = Async::::connect(path).await?; diff --git a/sqlx-core/src/rt/rt_async_std/socket.rs b/sqlx-core/src/rt/rt_async_std/socket.rs index 2d66d70c76..932a129f94 100644 --- a/sqlx-core/src/rt/rt_async_std/socket.rs +++ b/sqlx-core/src/rt/rt_async_std/socket.rs @@ -7,7 +7,7 @@ use std::net::{Shutdown, TcpStream}; use std::task::{Context, Poll}; use crate::io::ReadBuf; -use async_io::Async; +use async_io_std::Async; impl Socket for Async { fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { From 31553e730bd269ef485c163cb600be991ad6eb99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 15:12:08 +0100 Subject: [PATCH 02/28] Sqlx-core: simplify TimeoutError --- sqlx-core/src/rt/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 43409073ab..65f48d3965 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -12,7 +12,7 @@ pub mod rt_tokio; #[derive(Debug, thiserror::Error)] #[error("operation timed out")] -pub struct TimeoutError(()); +pub struct TimeoutError; pub enum JoinHandle { #[cfg(feature = "_rt-async-std")] @@ -28,14 +28,14 @@ pub async fn timeout(duration: Duration, f: F) -> Result Date: Sun, 2 Mar 2025 15:14:49 +0100 Subject: [PATCH 03/28] Sqlx-core: code for async-global-executor --- .../rt_async_global_executor/join_handle.rs | 30 ++++++++++ .../src/rt/rt_async_global_executor/mod.rs | 10 ++++ .../src/rt/rt_async_global_executor/socket.rs | 55 +++++++++++++++++++ .../rt/rt_async_global_executor/timeout.rs | 55 +++++++++++++++++++ .../rt/rt_async_global_executor/yield_now.rs | 28 ++++++++++ 5 files changed, 178 insertions(+) create mode 100644 sqlx-core/src/rt/rt_async_global_executor/join_handle.rs create mode 100644 sqlx-core/src/rt/rt_async_global_executor/mod.rs create mode 100644 sqlx-core/src/rt/rt_async_global_executor/socket.rs create mode 100644 sqlx-core/src/rt/rt_async_global_executor/timeout.rs create mode 100644 sqlx-core/src/rt/rt_async_global_executor/yield_now.rs diff --git a/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs b/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs new file mode 100644 index 0000000000..580883e21f --- /dev/null +++ b/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs @@ -0,0 +1,30 @@ +use std::{ + future::Future, + pin::Pin, + task::{Context, Poll}, +}; + +use async_global_executor::Task; + +pub struct JoinHandle { + pub task: Option>, +} + +impl Drop for JoinHandle { + fn drop(&mut self) { + if let Some(task) = self.task.take() { + task.detach(); + } + } +} + +impl Future for JoinHandle { + type Output = T; + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + match self.task.as_mut() { + Some(task) => Future::poll(Pin::new(task), cx), + None => unreachable!("JoinHandle polled after dropping"), + } + } +} diff --git a/sqlx-core/src/rt/rt_async_global_executor/mod.rs b/sqlx-core/src/rt/rt_async_global_executor/mod.rs new file mode 100644 index 0000000000..e7e802b734 --- /dev/null +++ b/sqlx-core/src/rt/rt_async_global_executor/mod.rs @@ -0,0 +1,10 @@ +mod join_handle; +pub use join_handle::*; + +mod socket; + +mod timeout; +pub use timeout::*; + +pub mod yield_now; +pub use yield_now::*; diff --git a/sqlx-core/src/rt/rt_async_global_executor/socket.rs b/sqlx-core/src/rt/rt_async_global_executor/socket.rs new file mode 100644 index 0000000000..d5f44bb766 --- /dev/null +++ b/sqlx-core/src/rt/rt_async_global_executor/socket.rs @@ -0,0 +1,55 @@ +use crate::net::Socket; + +use std::io; +use std::io::{Read, Write}; +use std::net::{Shutdown, TcpStream}; + +use std::task::{Context, Poll}; + +use crate::io::ReadBuf; +use async_io_global_executor::Async; + +impl Socket for Async { + fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { + unsafe { self.get_mut().read(buf.init_mut()) } + } + + fn try_write(&mut self, buf: &[u8]) -> io::Result { + unsafe { self.get_mut().write(buf) } + } + + fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_readable(cx) + } + + fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_writable(cx) + } + + fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { + unsafe { Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) } + } +} + +#[cfg(unix)] +impl Socket for Async { + fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { + unsafe { self.get_mut().read(buf.init_mut()) } + } + + fn try_write(&mut self, buf: &[u8]) -> io::Result { + unsafe { self.get_mut().write(buf) } + } + + fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_readable(cx) + } + + fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_writable(cx) + } + + fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { + unsafe { Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) } + } +} diff --git a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs new file mode 100644 index 0000000000..e4bd2ba697 --- /dev/null +++ b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs @@ -0,0 +1,55 @@ +use std::{ + future::Future, + pin::Pin, + task::{Context, Poll}, + time::Duration, +}; + +use crate::rt::TimeoutError; + +pub async fn sleep(duration: Duration) { + timeout_future(duration).await; +} + +pub fn timeout( + duration: Duration, + future: F, +) -> impl Future> { + TimeoutFuture::new(future, timeout_future(duration)) +} + +fn timeout_future(duration: Duration) -> impl Future { + async_io_global_executor::Timer::after(duration) +} + +pub struct TimeoutFuture { + future: F, + delay: D, +} + +impl TimeoutFuture { + fn new(future: F, delay: D) -> TimeoutFuture { + TimeoutFuture { future, delay } + } +} + +impl Future for TimeoutFuture { + type Output = Result; + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let future_polled = { + let future = unsafe { self.as_mut().map_unchecked_mut(|s| &mut s.future) }; // safe, as self is Pin + future.poll(cx) + }; + match future_polled { + Poll::Ready(v) => Poll::Ready(Ok(v)), + Poll::Pending => { + let delay = unsafe { self.map_unchecked_mut(|s| &mut s.delay) }; // safe, as self is Pin + match delay.poll(cx) { + Poll::Ready(_) => Poll::Ready(Err(TimeoutError)), + Poll::Pending => Poll::Pending, + } + } + } + } +} diff --git a/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs b/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs new file mode 100644 index 0000000000..1adb55e0f4 --- /dev/null +++ b/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs @@ -0,0 +1,28 @@ +use std::{ + future::Future, + pin::Pin, + task::{Context, Poll}, +}; + +pub fn yield_now() -> impl Future { + YieldNow(false) +} + +struct YieldNow(bool); + +impl Future for YieldNow { + type Output = (); + + // The futures executor is implemented as a FIFO queue, so all this future + // does is re-schedule the future back to the end of the queue, giving room + // for other futures to progress. + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + if !self.0 { + self.0 = true; + cx.waker().wake_by_ref(); + Poll::Pending + } else { + Poll::Ready(()) + } + } +} From 6c324b1c409a52fd42dc061f59b58b2f449abbb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 15:15:58 +0100 Subject: [PATCH 04/28] Sqlx: integrate async-global-executor feature --- .github/workflows/sqlx.yml | 10 ++--- Cargo.lock | 41 +++++++++++++++--- Cargo.toml | 10 +++++ sqlx-core/Cargo.toml | 8 ++++ sqlx-core/src/lib.rs | 2 +- sqlx-core/src/net/socket/mod.rs | 53 +++++++++++++++++++++-- sqlx-core/src/rt/mod.rs | 75 ++++++++++++++++++++++++++------- sqlx-macros-core/Cargo.toml | 2 + sqlx-macros/Cargo.toml | 1 + 9 files changed, 171 insertions(+), 31 deletions(-) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index 3f1f44d393..b21bec4811 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - runtime: [async-std, tokio] + runtime: [async-global-executor, async-std, tokio] tls: [native-tls, rustls, none] steps: - uses: actions/checkout@v4 @@ -116,7 +116,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - runtime: [async-std, tokio] + runtime: [async-global-executor, async-std, tokio] linking: [sqlite, sqlite-unbundled] needs: check steps: @@ -183,7 +183,7 @@ jobs: strategy: matrix: postgres: [17, 13] - runtime: [async-std, tokio] + runtime: [async-global-executor, async-std, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: @@ -283,7 +283,7 @@ jobs: strategy: matrix: mysql: [8] - runtime: [async-std, tokio] + runtime: [async-global-executor, async-std, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: @@ -371,7 +371,7 @@ jobs: strategy: matrix: mariadb: [verylatest, 11_4, 10_11, 10_4] - runtime: [async-std, tokio] + runtime: [async-global-executor, async-std, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: diff --git a/Cargo.lock b/Cargo.lock index e54d82c0c9..9fa2f1a26b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -213,6 +213,20 @@ dependencies = [ "once_cell", ] +[[package]] +name = "async-global-executor" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", +] + [[package]] name = "async-io" version = "1.13.0" @@ -272,6 +286,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io 2.4.0", + "blocking", + "futures-lite 2.5.0", +] + [[package]] name = "async-std" version = "1.13.0" @@ -280,7 +305,7 @@ checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", - "async-global-executor", + "async-global-executor 2.4.1", "async-io 2.4.0", "async-lock 3.4.0", "crossbeam-utils", @@ -1261,7 +1286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2102,7 +2127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -3113,7 +3138,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3551,7 +3576,10 @@ dependencies = [ name = "sqlx-core" version = "0.8.3" dependencies = [ + "async-global-executor 3.1.0", "async-io 1.13.0", + "async-io 2.4.0", + "async-net", "async-std", "base64 0.22.1", "bigdecimal", @@ -3737,6 +3765,7 @@ dependencies = [ name = "sqlx-macros-core" version = "0.8.3" dependencies = [ + "async-global-executor 3.1.0", "async-std", "dotenvy", "either", @@ -4099,7 +4128,7 @@ dependencies = [ "getrandom", "once_cell", "rustix 0.38.43", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4775,7 +4804,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5a040e546f..41fe8c83ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,7 @@ _unstable-all-types = [ ] # Base runtime features without TLS +runtime-async-global-executor = ["_rt-async-global-executor", "sqlx-core/_rt-async-global-executor", "sqlx-macros?/_rt-async-global-executor"] runtime-async-std = ["_rt-async-std", "sqlx-core/_rt-async-std", "sqlx-macros?/_rt-async-std"] runtime-tokio = ["_rt-tokio", "sqlx-core/_rt-tokio", "sqlx-macros?/_rt-tokio"] @@ -92,6 +93,9 @@ tls-none = [] # Legacy Runtime + TLS features +runtime-async-global-executor-native-tls = ["runtime-async-global-executor", "tls-native-tls"] +runtime-async-global-executor-rustls = ["runtime-async-global-executor", "tls-rustls-ring"] + runtime-async-std-native-tls = ["runtime-async-std", "tls-native-tls"] runtime-async-std-rustls = ["runtime-async-std", "tls-rustls-ring"] @@ -99,6 +103,7 @@ runtime-tokio-native-tls = ["runtime-tokio", "tls-native-tls"] runtime-tokio-rustls = ["runtime-tokio", "tls-rustls-ring"] # for conditional compilation +_rt-async-global-executor = [] _rt-async-std = [] _rt-tokio = [] _sqlite = [] @@ -154,6 +159,11 @@ uuid = "1.1.2" dotenvy = { version = "0.15.0", default-features = false } # Runtimes +[workspace.dependencies.async-global-executor] +version = "3.1" +default-features = false +features = ["async-io"] + [workspace.dependencies.async-std] version = "1.12" diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index 48603261bb..b38916d5cf 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -19,6 +19,11 @@ any = [] json = ["serde", "serde_json"] # for conditional compilation +_rt-async-global-executor = [ + "async-global-executor", + "async-io-global-executor", + "async-net", +] _rt-async-std = ["async-std", "async-io-std"] _rt-tokio = ["tokio", "tokio-stream"] _tls-native-tls = ["native-tls"] @@ -33,6 +38,7 @@ offline = ["serde", "either/serde"] [dependencies] # Runtimes +async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } tokio = { workspace = true, optional = true } @@ -52,7 +58,9 @@ ipnetwork = { workspace = true, optional = true } mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } +async-io-global-executor = { package = "async-io", version = "2.2", optional = true } async-io-std = { package = "async-io", version = "1.9.0", optional = true } +async-net = { package = "async-net", version = "2.0.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" chrono = { version = "0.4.34", default-features = false, features = ["clock"], optional = true } diff --git a/sqlx-core/src/lib.rs b/sqlx-core/src/lib.rs index df4b2cc27d..0097012e24 100644 --- a/sqlx-core/src/lib.rs +++ b/sqlx-core/src/lib.rs @@ -17,7 +17,7 @@ #![allow(clippy::needless_doctest_main, clippy::type_complexity)] // The only unsafe code in SQLx is that necessary to interact with native APIs like with SQLite, // and that can live in its own separate driver crate. -#![forbid(unsafe_code)] +// #![forbid(unsafe_code)] // Allows an API be documented as only available in some specific platforms. // #![cfg_attr(docsrs, feature(doc_cfg))] diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index 7981d1a56c..a186263b64 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -202,6 +202,40 @@ pub async fn connect_tcp( return Ok(with_socket.with_socket(stream).await); } + #[cfg(feature = "_rt-async-global-executor")] + { + use async_io_global_executor::Async; + use async_net::resolve; + use std::net::TcpStream; + + let mut last_err = None; + + // Loop through all the Socket Addresses that the hostname resolves to + for socket_addr in resolve((host, port)).await? { + let stream = Async::::connect(socket_addr) + .await + .and_then(|s| { + s.get_ref().set_nodelay(true)?; + Ok(s) + }); + match stream { + Ok(stream) => return Ok(with_socket.with_socket(stream).await), + Err(e) => last_err = Some(e), + } + } + + // If we reach this point, it means we failed to connect to any of the addresses. + // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. + return match last_err { + Some(err) => Err(err.into()), + None => Err(io::Error::new( + io::ErrorKind::AddrNotAvailable, + "Hostname did not resolve to any addresses", + ) + .into()), + }; + } + #[cfg(feature = "_rt-async-std")] { use async_io_std::Async; @@ -226,17 +260,18 @@ pub async fn connect_tcp( // If we reach this point, it means we failed to connect to any of the addresses. // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - match last_err { + return match last_err { Some(err) => Err(err.into()), None => Err(io::Error::new( io::ErrorKind::AddrNotAvailable, "Hostname did not resolve to any addresses", ) .into()), - } + }; } - #[cfg(not(feature = "_rt-async-std"))] + #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std")))] + #[allow(unreachable_code)] { crate::rt::missing_rt((host, port, with_socket)) } @@ -260,6 +295,16 @@ pub async fn connect_uds, Ws: WithSocket>( return Ok(with_socket.with_socket(stream).await); } + #[cfg(feature = "_rt-async-global-executor")] + { + use async_io_global_executor::Async; + use std::os::unix::net::UnixStream; + + let stream = Async::::connect(path).await?; + + Ok(with_socket.with_socket(stream).await) + } + #[cfg(feature = "_rt-async-std")] { use async_io_std::Async; @@ -270,7 +315,7 @@ pub async fn connect_uds, Ws: WithSocket>( Ok(with_socket.with_socket(stream).await) } - #[cfg(not(feature = "_rt-async-std"))] + #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std")))] { crate::rt::missing_rt((path, with_socket)) } diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 65f48d3965..b64f89374b 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -4,6 +4,9 @@ use std::pin::Pin; use std::task::{Context, Poll}; use std::time::Duration; +#[cfg(feature = "_rt-async-global-executor")] +pub mod rt_async_global_executor; + #[cfg(feature = "_rt-async-std")] pub mod rt_async_std; @@ -15,6 +18,8 @@ pub mod rt_tokio; pub struct TimeoutError; pub enum JoinHandle { + #[cfg(feature = "_rt-async-global-executor")] + AsyncGlobalExecutor(rt_async_global_executor::JoinHandle), #[cfg(feature = "_rt-async-std")] AsyncStd(async_std::task::JoinHandle), #[cfg(feature = "_rt-tokio")] @@ -31,14 +36,20 @@ pub async fn timeout(duration: Duration, f: F) -> Result(f: F) -> F::Output { .block_on(f); } - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(feature = "_rt-async-global-executor")] { - async_std::task::block_on(f) + return async_io_global_executor::block_on(f); } - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(feature = "_rt-async-std")] { - missing_rt(f) + return async_std::task::block_on(f); } + + #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std",)))] + #[allow(unreachable_code)] + missing_rt(f) } #[track_caller] @@ -140,7 +183,7 @@ pub fn missing_rt(_unused: T) -> ! { panic!("this functionality requires a Tokio context") } - panic!("either the `runtime-async-std` or `runtime-tokio` feature must be enabled") + panic!("one of the `runtime-async-global-executor`, `runtime-async-std`, or `runtime-tokio` feature must be enabled") } impl Future for JoinHandle { @@ -149,6 +192,8 @@ impl Future for JoinHandle { #[track_caller] fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { match &mut *self { + #[cfg(feature = "_rt-async-global-executor")] + Self::AsyncGlobalExecutor(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-async-std")] Self::AsyncStd(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-tokio")] diff --git a/sqlx-macros-core/Cargo.toml b/sqlx-macros-core/Cargo.toml index 46786b7d8d..0d7ac869aa 100644 --- a/sqlx-macros-core/Cargo.toml +++ b/sqlx-macros-core/Cargo.toml @@ -11,6 +11,7 @@ repository.workspace = true default = [] # for conditional compilation +_rt-async-global-executor = ["async-global-executor", "sqlx-core/_rt-async-global-executor"] _rt-async-std = ["async-std", "sqlx-core/_rt-async-std"] _rt-tokio = ["tokio", "sqlx-core/_rt-tokio"] @@ -50,6 +51,7 @@ sqlx-mysql = { workspace = true, features = ["offline", "migrate"], optional = t sqlx-postgres = { workspace = true, features = ["offline", "migrate"], optional = true } sqlx-sqlite = { workspace = true, features = ["offline", "migrate"], optional = true } +async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } tokio = { workspace = true, optional = true } diff --git a/sqlx-macros/Cargo.toml b/sqlx-macros/Cargo.toml index 5617d3f251..046967154b 100644 --- a/sqlx-macros/Cargo.toml +++ b/sqlx-macros/Cargo.toml @@ -14,6 +14,7 @@ proc-macro = true default = [] # for conditional compilation +_rt-async-global-executor = ["sqlx-macros-core/_rt-async-global-executor"] _rt-async-std = ["sqlx-macros-core/_rt-async-std"] _rt-tokio = ["sqlx-macros-core/_rt-tokio"] From 40f3d8d81151c217d82b6ac738da1f18f23fa80a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 15:27:19 +0100 Subject: [PATCH 05/28] Note to unsafe --- sqlx-core/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/sqlx-core/src/lib.rs b/sqlx-core/src/lib.rs index 0097012e24..ebaf487733 100644 --- a/sqlx-core/src/lib.rs +++ b/sqlx-core/src/lib.rs @@ -17,6 +17,7 @@ #![allow(clippy::needless_doctest_main, clippy::type_complexity)] // The only unsafe code in SQLx is that necessary to interact with native APIs like with SQLite, // and that can live in its own separate driver crate. +// temporary // #![forbid(unsafe_code)] // Allows an API be documented as only available in some specific platforms. // From 375b493ecef6ed1244dc70157cb07fc53db4c8f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 15:32:05 +0100 Subject: [PATCH 06/28] Step up MSRV as async-global-executor needs it --- Cargo.toml | 3 +-- rust-toolchain.toml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 41fe8c83ee..c97efd1cde 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,8 +35,7 @@ authors = [ "Chloe Ross ", "Daniel Akhterov ", ] -# TODO: enable this for 0.9.0 -# rust-version = "1.80.0" +rust-version = "1.80.0" [package] name = "sqlx" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 29f0b09695..16beae9c11 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ # Note: should NOT increase during a minor/patch release cycle [toolchain] -channel = "1.78" +channel = "1.80" profile = "minimal" From aef441bccde9b22385f2c49b57366a7ac409c563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 2 Mar 2025 16:02:36 +0100 Subject: [PATCH 07/28] Sqlx-core: fix of unix socket build --- sqlx-core/src/net/socket/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index a186263b64..f4d9dd14bf 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -302,7 +302,7 @@ pub async fn connect_uds, Ws: WithSocket>( let stream = Async::::connect(path).await?; - Ok(with_socket.with_socket(stream).await) + return Ok(with_socket.with_socket(stream).await); } #[cfg(feature = "_rt-async-std")] @@ -312,10 +312,11 @@ pub async fn connect_uds, Ws: WithSocket>( let stream = Async::::connect(path).await?; - Ok(with_socket.with_socket(stream).await) + return Ok(with_socket.with_socket(stream).await); } #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std")))] + #[allow(unreachable_code)] { crate::rt::missing_rt((path, with_socket)) } From f5e374a3dc754f32d67442cb3dedd362dad5ab47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 16 Mar 2025 21:10:26 +0100 Subject: [PATCH 08/28] Unsafe fixes, smol executor added --- Cargo.lock | 67 +++++++++++++++ Cargo.toml | 9 ++ sqlx-core/Cargo.toml | 2 + sqlx-core/src/lib.rs | 2 +- sqlx-core/src/rt/mod.rs | 84 ++++++++++++++++--- .../src/rt/rt_async_global_executor/socket.rs | 12 +-- .../rt/rt_async_global_executor/timeout.rs | 51 ++--------- sqlx-core/src/rt/rt_smol/join_handle.rs | 30 +++++++ sqlx-core/src/rt/rt_smol/mod.rs | 7 ++ sqlx-core/src/rt/rt_smol/socket.rs | 55 ++++++++++++ sqlx-core/src/rt/rt_smol/timeout.rs | 20 +++++ sqlx-macros-core/Cargo.toml | 2 + sqlx-macros/Cargo.toml | 1 + 13 files changed, 280 insertions(+), 62 deletions(-) create mode 100644 sqlx-core/src/rt/rt_smol/join_handle.rs create mode 100644 sqlx-core/src/rt/rt_smol/mod.rs create mode 100644 sqlx-core/src/rt/rt_smol/socket.rs create mode 100644 sqlx-core/src/rt/rt_smol/timeout.rs diff --git a/Cargo.lock b/Cargo.lock index 5fa70a25ca..7a4576116d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -198,6 +198,17 @@ dependencies = [ "slab", ] +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", +] + [[package]] name = "async-global-executor" version = "2.4.1" @@ -297,6 +308,43 @@ dependencies = [ "futures-lite 2.5.0", ] +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.43", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + [[package]] name = "async-std" version = "1.13.0" @@ -3352,6 +3400,23 @@ dependencies = [ "serde", ] +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-fs", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-net", + "async-process", + "blocking", + "futures-lite 2.5.0", +] + [[package]] name = "socket2" version = "0.4.10" @@ -3486,6 +3551,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", + "smol", "sqlx", "thiserror 2.0.11", "time", @@ -3650,6 +3716,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "smol", "sqlx-core", "sqlx-mysql", "sqlx-postgres", diff --git a/Cargo.toml b/Cargo.toml index c97efd1cde..ed5a9f1b4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,6 +77,7 @@ _unstable-all-types = [ # Base runtime features without TLS runtime-async-global-executor = ["_rt-async-global-executor", "sqlx-core/_rt-async-global-executor", "sqlx-macros?/_rt-async-global-executor"] runtime-async-std = ["_rt-async-std", "sqlx-core/_rt-async-std", "sqlx-macros?/_rt-async-std"] +runtime-smol = ["_rt-smol", "sqlx-core/_rt-smol", "sqlx-macros?/_rt-smol"] runtime-tokio = ["_rt-tokio", "sqlx-core/_rt-tokio", "sqlx-macros?/_rt-tokio"] # TLS features @@ -98,12 +99,16 @@ runtime-async-global-executor-rustls = ["runtime-async-global-executor", "tls-ru runtime-async-std-native-tls = ["runtime-async-std", "tls-native-tls"] runtime-async-std-rustls = ["runtime-async-std", "tls-rustls-ring"] +runtime-smol-native-tls = ["runtime-smol", "tls-native-tls"] +runtime-smol-rustls = ["runtime-smol", "tls-rustls-ring"] + runtime-tokio-native-tls = ["runtime-tokio", "tls-native-tls"] runtime-tokio-rustls = ["runtime-tokio", "tls-rustls-ring"] # for conditional compilation _rt-async-global-executor = [] _rt-async-std = [] +_rt-smol = [] _rt-tokio = [] _sqlite = [] @@ -166,6 +171,10 @@ features = ["async-io"] [workspace.dependencies.async-std] version = "1.12" +[workspace.dependencies.smol] +version = "2.0" +default-features = false + [workspace.dependencies.tokio] version = "1" features = ["time", "net", "sync", "fs", "io-util", "rt"] diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index b38916d5cf..b8cb67a257 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -25,6 +25,7 @@ _rt-async-global-executor = [ "async-net", ] _rt-async-std = ["async-std", "async-io-std"] +_rt-smol = ["smol"] _rt-tokio = ["tokio", "tokio-stream"] _tls-native-tls = ["native-tls"] _tls-rustls-aws-lc-rs = ["_tls-rustls", "rustls/aws-lc-rs", "webpki-roots"] @@ -40,6 +41,7 @@ offline = ["serde", "either/serde"] # Runtimes async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } +smol = { workspace = true, optional = true } tokio = { workspace = true, optional = true } # TLS diff --git a/sqlx-core/src/lib.rs b/sqlx-core/src/lib.rs index ebaf487733..a424b3a4b0 100644 --- a/sqlx-core/src/lib.rs +++ b/sqlx-core/src/lib.rs @@ -18,7 +18,7 @@ // The only unsafe code in SQLx is that necessary to interact with native APIs like with SQLite, // and that can live in its own separate driver crate. // temporary -// #![forbid(unsafe_code)] +#![forbid(unsafe_code)] // Allows an API be documented as only available in some specific platforms. // #![cfg_attr(docsrs, feature(doc_cfg))] diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index b64f89374b..be5e6e4da2 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -10,6 +10,9 @@ pub mod rt_async_global_executor; #[cfg(feature = "_rt-async-std")] pub mod rt_async_std; +#[cfg(feature = "_rt-smol")] +pub mod rt_smol; + #[cfg(feature = "_rt-tokio")] pub mod rt_tokio; @@ -22,6 +25,8 @@ pub enum JoinHandle { AsyncGlobalExecutor(rt_async_global_executor::JoinHandle), #[cfg(feature = "_rt-async-std")] AsyncStd(async_std::task::JoinHandle), + #[cfg(feature = "_rt-smol")] + Smol(rt_smol::JoinHandle), #[cfg(feature = "_rt-tokio")] Tokio(tokio::task::JoinHandle), // `PhantomData` requires `T: Unpin` @@ -41,6 +46,11 @@ pub async fn timeout(duration: Duration, f: F) -> Result(duration: Duration, f: F) -> Result(f: F) -> F::Output { #[cfg(feature = "_rt-tokio")] { - return tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to start Tokio runtime") - .block_on(f); + if rt_tokio::available() { + return tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start Tokio runtime") + .block_on(f); + } } #[cfg(feature = "_rt-async-global-executor")] @@ -172,7 +221,16 @@ pub fn test_block_on(f: F) -> F::Output { return async_std::task::block_on(f); } - #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std",)))] + #[cfg(feature = "_rt-smol")] + { + return smol::block_on(f); + } + + #[cfg(not(all( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + )))] #[allow(unreachable_code)] missing_rt(f) } @@ -183,7 +241,7 @@ pub fn missing_rt(_unused: T) -> ! { panic!("this functionality requires a Tokio context") } - panic!("one of the `runtime-async-global-executor`, `runtime-async-std`, or `runtime-tokio` feature must be enabled") + panic!("one of the `runtime-async-global-executor`, `runtime-async-std`, `runtime-smol`, or `runtime-tokio` feature must be enabled") } impl Future for JoinHandle { @@ -196,6 +254,8 @@ impl Future for JoinHandle { Self::AsyncGlobalExecutor(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-async-std")] Self::AsyncStd(handle) => Pin::new(handle).poll(cx), + #[cfg(feature = "_rt-smol")] + Self::Smol(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-tokio")] Self::Tokio(handle) => Pin::new(handle) .poll(cx) diff --git a/sqlx-core/src/rt/rt_async_global_executor/socket.rs b/sqlx-core/src/rt/rt_async_global_executor/socket.rs index d5f44bb766..d4c088d1c6 100644 --- a/sqlx-core/src/rt/rt_async_global_executor/socket.rs +++ b/sqlx-core/src/rt/rt_async_global_executor/socket.rs @@ -11,11 +11,11 @@ use async_io_global_executor::Async; impl Socket for Async { fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - unsafe { self.get_mut().read(buf.init_mut()) } + self.get_ref().read(buf.init_mut()) } fn try_write(&mut self, buf: &[u8]) -> io::Result { - unsafe { self.get_mut().write(buf) } + self.get_ref().write(buf) } fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { @@ -27,18 +27,18 @@ impl Socket for Async { } fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - unsafe { Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) } + Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) } } #[cfg(unix)] impl Socket for Async { fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - unsafe { self.get_mut().read(buf.init_mut()) } + self.get_ref().read(buf.init_mut()) } fn try_write(&mut self, buf: &[u8]) -> io::Result { - unsafe { self.get_mut().write(buf) } + self.get_ref().write(buf) } fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { @@ -50,6 +50,6 @@ impl Socket for Async { } fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - unsafe { Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) } + Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) } } diff --git a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs index e4bd2ba697..8188758d93 100644 --- a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs +++ b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs @@ -1,9 +1,6 @@ -use std::{ - future::Future, - pin::Pin, - task::{Context, Poll}, - time::Duration, -}; +use std::{future::Future, pin::pin, time::Duration}; + +use futures_util::future::{select, Either}; use crate::rt::TimeoutError; @@ -11,45 +8,13 @@ pub async fn sleep(duration: Duration) { timeout_future(duration).await; } -pub fn timeout( - duration: Duration, - future: F, -) -> impl Future> { - TimeoutFuture::new(future, timeout_future(duration)) +pub async fn timeout(duration: Duration, future: F) -> Result { + match select(pin!(future), timeout_future(duration)).await { + Either::Left((result, _)) => Ok(result), + Either::Right(_) => Err(TimeoutError), + } } fn timeout_future(duration: Duration) -> impl Future { async_io_global_executor::Timer::after(duration) } - -pub struct TimeoutFuture { - future: F, - delay: D, -} - -impl TimeoutFuture { - fn new(future: F, delay: D) -> TimeoutFuture { - TimeoutFuture { future, delay } - } -} - -impl Future for TimeoutFuture { - type Output = Result; - - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - let future_polled = { - let future = unsafe { self.as_mut().map_unchecked_mut(|s| &mut s.future) }; // safe, as self is Pin - future.poll(cx) - }; - match future_polled { - Poll::Ready(v) => Poll::Ready(Ok(v)), - Poll::Pending => { - let delay = unsafe { self.map_unchecked_mut(|s| &mut s.delay) }; // safe, as self is Pin - match delay.poll(cx) { - Poll::Ready(_) => Poll::Ready(Err(TimeoutError)), - Poll::Pending => Poll::Pending, - } - } - } - } -} diff --git a/sqlx-core/src/rt/rt_smol/join_handle.rs b/sqlx-core/src/rt/rt_smol/join_handle.rs new file mode 100644 index 0000000000..6702733c4a --- /dev/null +++ b/sqlx-core/src/rt/rt_smol/join_handle.rs @@ -0,0 +1,30 @@ +use std::{ + future::Future, + pin::Pin, + task::{Context, Poll}, +}; + +use smol::Task; + +pub struct JoinHandle { + pub task: Option>, +} + +impl Drop for JoinHandle { + fn drop(&mut self) { + if let Some(task) = self.task.take() { + task.detach(); + } + } +} + +impl Future for JoinHandle { + type Output = T; + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + match self.task.as_mut() { + Some(task) => Future::poll(Pin::new(task), cx), + None => unreachable!("JoinHandle polled after dropping"), + } + } +} diff --git a/sqlx-core/src/rt/rt_smol/mod.rs b/sqlx-core/src/rt/rt_smol/mod.rs new file mode 100644 index 0000000000..855405a99d --- /dev/null +++ b/sqlx-core/src/rt/rt_smol/mod.rs @@ -0,0 +1,7 @@ +mod join_handle; +pub use join_handle::*; + +mod socket; + +mod timeout; +pub use timeout::*; diff --git a/sqlx-core/src/rt/rt_smol/socket.rs b/sqlx-core/src/rt/rt_smol/socket.rs new file mode 100644 index 0000000000..940e1b4b5d --- /dev/null +++ b/sqlx-core/src/rt/rt_smol/socket.rs @@ -0,0 +1,55 @@ +use crate::net::Socket; + +use std::io; +use std::io::{Read, Write}; +use std::net::{Shutdown, TcpStream}; + +use std::task::{Context, Poll}; + +use crate::io::ReadBuf; +use smol::Async; + +impl Socket for Async { + fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { + self.get_ref().read(buf.init_mut()) + } + + fn try_write(&mut self, buf: &[u8]) -> io::Result { + self.get_ref().write(buf) + } + + fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_readable(cx) + } + + fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_writable(cx) + } + + fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) + } +} + +#[cfg(unix)] +impl Socket for Async { + fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { + self.get_ref().read(buf.init_mut()) + } + + fn try_write(&mut self, buf: &[u8]) -> io::Result { + self.get_ref().write(buf) + } + + fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_readable(cx) + } + + fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.poll_writable(cx) + } + + fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) + } +} diff --git a/sqlx-core/src/rt/rt_smol/timeout.rs b/sqlx-core/src/rt/rt_smol/timeout.rs new file mode 100644 index 0000000000..75afff58ba --- /dev/null +++ b/sqlx-core/src/rt/rt_smol/timeout.rs @@ -0,0 +1,20 @@ +use std::{future::Future, pin::pin, time::Duration}; + +use futures_util::future::{select, Either}; + +use crate::rt::TimeoutError; + +pub async fn sleep(duration: Duration) { + timeout_future(duration).await; +} + +pub async fn timeout(duration: Duration, future: F) -> Result { + match select(pin!(future), timeout_future(duration)).await { + Either::Left((result, _)) => Ok(result), + Either::Right(_) => Err(TimeoutError), + } +} + +fn timeout_future(duration: Duration) -> impl Future { + smol::Timer::after(duration) +} diff --git a/sqlx-macros-core/Cargo.toml b/sqlx-macros-core/Cargo.toml index 0d7ac869aa..9be9edc022 100644 --- a/sqlx-macros-core/Cargo.toml +++ b/sqlx-macros-core/Cargo.toml @@ -13,6 +13,7 @@ default = [] # for conditional compilation _rt-async-global-executor = ["async-global-executor", "sqlx-core/_rt-async-global-executor"] _rt-async-std = ["async-std", "sqlx-core/_rt-async-std"] +_rt-smol = ["smol", "sqlx-core/_rt-smol"] _rt-tokio = ["tokio", "sqlx-core/_rt-tokio"] _tls-native-tls = ["sqlx-core/_tls-native-tls"] @@ -53,6 +54,7 @@ sqlx-sqlite = { workspace = true, features = ["offline", "migrate"], optional = async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } +smol = { workspace = true, optional = true } tokio = { workspace = true, optional = true } dotenvy = { workspace = true } diff --git a/sqlx-macros/Cargo.toml b/sqlx-macros/Cargo.toml index 046967154b..c0fda68ec9 100644 --- a/sqlx-macros/Cargo.toml +++ b/sqlx-macros/Cargo.toml @@ -16,6 +16,7 @@ default = [] # for conditional compilation _rt-async-global-executor = ["sqlx-macros-core/_rt-async-global-executor"] _rt-async-std = ["sqlx-macros-core/_rt-async-std"] +_rt-smol = ["sqlx-macros-core/_rt-smol"] _rt-tokio = ["sqlx-macros-core/_rt-tokio"] _tls-native-tls = ["sqlx-macros-core/_tls-native-tls"] From 7de57180ec4dc8b5a78290ae3b2ec06c5ec16061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 16 Mar 2025 21:27:13 +0100 Subject: [PATCH 09/28] Workflow fix --- .github/workflows/sqlx.yml | 10 +++++----- sqlx-core/src/lib.rs | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index b21bec4811..d649dd2141 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - runtime: [async-global-executor, async-std, tokio] + runtime: [async-global-executor, async-std, smol, tokio] tls: [native-tls, rustls, none] steps: - uses: actions/checkout@v4 @@ -116,7 +116,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - runtime: [async-global-executor, async-std, tokio] + runtime: [async-global-executor, async-std, smol, tokio] linking: [sqlite, sqlite-unbundled] needs: check steps: @@ -183,7 +183,7 @@ jobs: strategy: matrix: postgres: [17, 13] - runtime: [async-global-executor, async-std, tokio] + runtime: [async-global-executor, async-std, smol, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: @@ -283,7 +283,7 @@ jobs: strategy: matrix: mysql: [8] - runtime: [async-global-executor, async-std, tokio] + runtime: [async-global-executor, async-std, smol, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: @@ -371,7 +371,7 @@ jobs: strategy: matrix: mariadb: [verylatest, 11_4, 10_11, 10_4] - runtime: [async-global-executor, async-std, tokio] + runtime: [async-global-executor, async-std, smol, tokio] tls: [native-tls, rustls-aws-lc-rs, rustls-ring, none] needs: check steps: diff --git a/sqlx-core/src/lib.rs b/sqlx-core/src/lib.rs index a424b3a4b0..df4b2cc27d 100644 --- a/sqlx-core/src/lib.rs +++ b/sqlx-core/src/lib.rs @@ -17,7 +17,6 @@ #![allow(clippy::needless_doctest_main, clippy::type_complexity)] // The only unsafe code in SQLx is that necessary to interact with native APIs like with SQLite, // and that can live in its own separate driver crate. -// temporary #![forbid(unsafe_code)] // Allows an API be documented as only available in some specific platforms. // From b462f438a30ec4bc2e8b83e8be1fbd8d908ad7d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 16 Mar 2025 23:42:43 +0100 Subject: [PATCH 10/28] Changes outside sqlx_rt --- Cargo.lock | 1 + sqlx-core/Cargo.toml | 2 + sqlx-core/src/net/socket/mod.rs | 30 ++++++- sqlx-core/src/sync.rs | 149 +++++++++++++++++++++++++++----- sqlx-macros-core/src/lib.rs | 17 +++- 5 files changed, 174 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a4576116d..1b37984bdb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3517,6 +3517,7 @@ dependencies = [ "async-global-executor 3.1.0", "async-io 1.13.0", "async-io 2.4.0", + "async-lock 3.4.0", "async-net", "async-std", "base64 0.22.1", diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index b8cb67a257..6f2c19227c 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -22,6 +22,7 @@ json = ["serde", "serde_json"] _rt-async-global-executor = [ "async-global-executor", "async-io-global-executor", + "async-lock", "async-net", ] _rt-async-std = ["async-std", "async-io-std"] @@ -62,6 +63,7 @@ uuid = { workspace = true, optional = true } async-io-global-executor = { package = "async-io", version = "2.2", optional = true } async-io-std = { package = "async-io", version = "1.9.0", optional = true } +async-lock = { version = "3.4.0", optional = true } async-net = { package = "async-net", version = "2.0.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index f4d9dd14bf..a70517da60 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -202,10 +202,16 @@ pub async fn connect_tcp( return Ok(with_socket.with_socket(stream).await); } - #[cfg(feature = "_rt-async-global-executor")] + #[cfg(any(feature = "_rt-async-global-executor", feature = "_rt-smol"))] { + #[cfg(feature = "_rt-async-global-executor")] use async_io_global_executor::Async; + #[cfg(feature = "_rt-async-global-executor")] use async_net::resolve; + #[cfg(feature = "_rt-smol")] + use smol::Async; + #[cfg(feature = "_rt-smol")] + use smol::net::resolve; use std::net::TcpStream; let mut last_err = None; @@ -270,7 +276,11 @@ pub async fn connect_tcp( }; } - #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std")))] + #[cfg(not(all( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + )))] #[allow(unreachable_code)] { crate::rt::missing_rt((host, port, with_socket)) @@ -315,7 +325,21 @@ pub async fn connect_uds, Ws: WithSocket>( return Ok(with_socket.with_socket(stream).await); } - #[cfg(not(all(feature = "_rt-async-global-executor", feature = "_rt-async-std")))] + #[cfg(feature = "_rt-smol")] + { + use smol::Async; + use std::os::unix::net::UnixStream; + + let stream = Async::::connect(path).await?; + + return Ok(with_socket.with_socket(stream).await); + } + + #[cfg(not(all( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + )))] #[allow(unreachable_code)] { crate::rt::missing_rt((path, with_socket)) diff --git a/sqlx-core/src/sync.rs b/sqlx-core/src/sync.rs index 27ad29c33e..c653c42d5c 100644 --- a/sqlx-core/src/sync.rs +++ b/sqlx-core/src/sync.rs @@ -4,14 +4,20 @@ // We'll generally lean towards Tokio's types as those are more featureful // (including `tokio-console` support) and more widely deployed. +#[cfg(all(feature = "_rt-async-global-executor", not(feature = "_rt-tokio")))] +pub use async_lock::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; + #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] pub use async_std::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; +#[cfg(all(feature = "_rt-smol", not(feature = "_rt-tokio")))] +pub use smol::lock::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; + #[cfg(feature = "_rt-tokio")] pub use tokio::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; pub struct AsyncSemaphore { - // We use the semaphore from futures-intrusive as the one from async-std + // We use the semaphore from futures-intrusive as the one from async-lock // is missing the ability to add arbitrary permits, and is not guaranteed to be fair: // * https://github.com/smol-rs/async-lock/issues/22 // * https://github.com/smol-rs/async-lock/issues/23 @@ -20,7 +26,14 @@ pub struct AsyncSemaphore { // and there are some soundness concerns (although it turns out any intrusive future is unsound // in MIRI due to the necessitated mutable aliasing): // https://github.com/launchbadge/sqlx/issues/1668 - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] inner: futures_intrusive::sync::Semaphore, #[cfg(feature = "_rt-tokio")] @@ -30,12 +43,24 @@ pub struct AsyncSemaphore { impl AsyncSemaphore { #[track_caller] pub fn new(fair: bool, permits: usize) -> Self { - if cfg!(not(any(feature = "_rt-async-std", feature = "_rt-tokio"))) { + if cfg!(not(any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol", + feature = "_rt-tokio" + ))) { crate::rt::missing_rt((fair, permits)); } AsyncSemaphore { - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] inner: futures_intrusive::sync::Semaphore::new(fair, permits), #[cfg(feature = "_rt-tokio")] inner: { @@ -46,18 +71,39 @@ impl AsyncSemaphore { } pub fn permits(&self) -> usize { - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] return self.inner.permits(); #[cfg(feature = "_rt-tokio")] return self.inner.available_permits(); - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] crate::rt::missing_rt(()) } pub async fn acquire(&self, permits: u32) -> AsyncSemaphoreReleaser<'_> { - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] return AsyncSemaphoreReleaser { inner: self.inner.acquire(permits as usize).await, }; @@ -73,12 +119,26 @@ impl AsyncSemaphore { .expect("BUG: we do not expose the `.close()` method"), }; - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] crate::rt::missing_rt(permits) } pub fn try_acquire(&self, permits: u32) -> Option> { - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] return Some(AsyncSemaphoreReleaser { inner: self.inner.try_acquire(permits as usize)?, }); @@ -88,18 +148,39 @@ impl AsyncSemaphore { inner: self.inner.try_acquire_many(permits).ok()?, }); - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] crate::rt::missing_rt(permits) } pub fn release(&self, permits: usize) { - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] return self.inner.release(permits); #[cfg(feature = "_rt-tokio")] return self.inner.add_permits(permits); - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] crate::rt::missing_rt(permits) } } @@ -114,30 +195,58 @@ pub struct AsyncSemaphoreReleaser<'a> { // and there are some soundness concerns (although it turns out any intrusive future is unsound // in MIRI due to the necessitated mutable aliasing): // https://github.com/launchbadge/sqlx/issues/1668 - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] inner: futures_intrusive::sync::SemaphoreReleaser<'a>, #[cfg(feature = "_rt-tokio")] inner: tokio::sync::SemaphorePermit<'a>, - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] _phantom: std::marker::PhantomData<&'a ()>, } impl AsyncSemaphoreReleaser<'_> { pub fn disarm(self) { - #[cfg(feature = "_rt-tokio")] + #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { - self.inner.forget(); + let mut this = self; + this.inner.disarm(); } - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] + #[cfg(feature = "_rt-tokio")] { - let mut this = self; - this.inner.disarm(); + self.inner.forget(); } - #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))] + #[cfg(not(any( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + feature = "_rt-tokio" + )))] crate::rt::missing_rt(()) } } diff --git a/sqlx-macros-core/src/lib.rs b/sqlx-macros-core/src/lib.rs index e8804f57fe..a00021ea82 100644 --- a/sqlx-macros-core/src/lib.rs +++ b/sqlx-macros-core/src/lib.rs @@ -72,11 +72,24 @@ where TOKIO_RT.block_on(f) } - #[cfg(all(feature = "_rt-async-std", not(feature = "tokio")))] + #[cfg(all( + any(feature = "_rt-async-global-executor", feature = "_rt-smol"), + not(feature = "_rt-tokio") + ))] + { + sqlx_core::rt::test_block_on(f) + } + + #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] { async_std::task::block_on(f) } - #[cfg(not(any(feature = "_rt-async-std", feature = "tokio")))] + #[cfg(not(any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol", + feature = "_rt-tokio" + )))] sqlx_core::rt::missing_rt(f) } From 4f851b0c1947f3bcb889339324197de124ab519b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 15:52:28 +0100 Subject: [PATCH 11/28] Cleanup conditional rt compilation --- Cargo.lock | 2 + Cargo.toml | 1 + sqlx-core/Cargo.toml | 1 + sqlx-core/src/net/socket/mod.rs | 221 ++++++++-------- sqlx-core/src/rt/mod.rs | 211 ++++++--------- .../src/rt/rt_async_global_executor/mod.rs | 2 - .../rt/{rt_async_std => rt_async_io}/mod.rs | 0 .../socket.rs | 14 +- sqlx-core/src/rt/rt_async_std/socket.rs | 55 ---- sqlx-core/src/rt/rt_smol/mod.rs | 2 - sqlx-core/src/rt/rt_smol/socket.rs | 55 ---- sqlx-core/src/sync.rs | 244 +++++++----------- sqlx-macros-core/Cargo.toml | 1 + sqlx-macros-core/src/lib.rs | 58 ++--- 14 files changed, 331 insertions(+), 536 deletions(-) rename sqlx-core/src/rt/{rt_async_std => rt_async_io}/mod.rs (100%) rename sqlx-core/src/rt/{rt_async_global_executor => rt_async_io}/socket.rs (83%) delete mode 100644 sqlx-core/src/rt/rt_async_std/socket.rs delete mode 100644 sqlx-core/src/rt/rt_smol/socket.rs diff --git a/Cargo.lock b/Cargo.lock index 1b37984bdb..fe6b4cf9b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3525,6 +3525,7 @@ dependencies = [ "bit-vec", "bstr", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -3707,6 +3708,7 @@ version = "0.8.3" dependencies = [ "async-global-executor 3.1.0", "async-std", + "cfg-if", "dotenvy", "either", "heck 0.5.0", diff --git a/Cargo.toml b/Cargo.toml index ed5a9f1b4e..d9822e9e41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -160,6 +160,7 @@ time = { version = "0.3.36", features = ["formatting", "parsing", "macros"] } uuid = "1.1.2" # Common utility crates +cfg-if = "1.0.0" dotenvy = { version = "0.15.0", default-features = false } # Runtimes diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index 6f2c19227c..cf1da37052 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -67,6 +67,7 @@ async-lock = { version = "3.4.0", optional = true } async-net = { package = "async-net", version = "2.0.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" +cfg-if = { workspace = true } chrono = { version = "0.4.34", default-features = false, features = ["clock"], optional = true } crc = { version = "3", optional = true } crossbeam-queue = "0.3.2" diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index a70517da60..8d3d71905d 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -5,6 +5,7 @@ use std::pin::Pin; use std::task::{ready, Context, Poll}; use bytes::BufMut; +use cfg_if::cfg_if; pub use buffered::{BufferedSocket, WriteBuffer}; @@ -202,88 +203,103 @@ pub async fn connect_tcp( return Ok(with_socket.with_socket(stream).await); } - #[cfg(any(feature = "_rt-async-global-executor", feature = "_rt-smol"))] - { - #[cfg(feature = "_rt-async-global-executor")] - use async_io_global_executor::Async; - #[cfg(feature = "_rt-async-global-executor")] - use async_net::resolve; - #[cfg(feature = "_rt-smol")] - use smol::Async; - #[cfg(feature = "_rt-smol")] - use smol::net::resolve; - use std::net::TcpStream; - - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in resolve((host, port)).await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), + cfg_if! { + if #[cfg(feature = "_rt-async-global-executor")] { + use async_io_global_executor::Async; + use async_net::resolve; + use std::net::TcpStream; + + let mut last_err = None; + + // Loop through all the Socket Addresses that the hostname resolves to + for socket_addr in resolve((host, port)).await? { + let stream = Async::::connect(socket_addr) + .await + .and_then(|s| { + s.get_ref().set_nodelay(true)?; + Ok(s) + }); + match stream { + Ok(stream) => return Ok(with_socket.with_socket(stream).await), + Err(e) => last_err = Some(e), + } } - } - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - return match last_err { - Some(err) => Err(err.into()), - None => Err(io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ) - .into()), - }; - } - - #[cfg(feature = "_rt-async-std")] - { - use async_io_std::Async; - use async_std::net::ToSocketAddrs; - use std::net::TcpStream; - - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in (host, port).to_socket_addrs().await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), + // If we reach this point, it means we failed to connect to any of the addresses. + // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. + Err(match last_err { + Some(err) => err, + None => io::Error::new( + io::ErrorKind::AddrNotAvailable, + "Hostname did not resolve to any addresses", + ), + } + .into()) + } else if #[cfg(feature = "_rt-async-std")] { + use async_io_std::Async; + use async_std::net::ToSocketAddrs; + use std::net::TcpStream; + + let mut last_err = None; + + // Loop through all the Socket Addresses that the hostname resolves to + for socket_addr in (host, port).to_socket_addrs().await? { + let stream = Async::::connect(socket_addr) + .await + .and_then(|s| { + s.get_ref().set_nodelay(true)?; + Ok(s) + }); + match stream { + Ok(stream) => return Ok(with_socket.with_socket(stream).await), + Err(e) => last_err = Some(e), + } } - } - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - return match last_err { - Some(err) => Err(err.into()), - None => Err(io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ) - .into()), - }; - } + // If we reach this point, it means we failed to connect to any of the addresses. + // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. + Err(match last_err { + Some(err) => err, + None => io::Error::new( + io::ErrorKind::AddrNotAvailable, + "Hostname did not resolve to any addresses", + ), + } + .into()) + } else if #[cfg(feature = "_rt-smol")] { + use smol::net::resolve; + use smol::Async; + use std::net::TcpStream; + + let mut last_err = None; + + // Loop through all the Socket Addresses that the hostname resolves to + for socket_addr in resolve((host, port)).await? { + let stream = Async::::connect(socket_addr) + .await + .and_then(|s| { + s.get_ref().set_nodelay(true)?; + Ok(s) + }); + match stream { + Ok(stream) => return Ok(with_socket.with_socket(stream).await), + Err(e) => last_err = Some(e), + } + } - #[cfg(not(all( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - )))] - #[allow(unreachable_code)] - { - crate::rt::missing_rt((host, port, with_socket)) + // If we reach this point, it means we failed to connect to any of the addresses. + // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. + Err(match last_err { + Some(err) => err, + None => io::Error::new( + io::ErrorKind::AddrNotAvailable, + "Hostname did not resolve to any addresses", + ), + } + .into()) + } else { + crate::rt::missing_rt((host, port, with_socket)) + } } } @@ -305,44 +321,31 @@ pub async fn connect_uds, Ws: WithSocket>( return Ok(with_socket.with_socket(stream).await); } - #[cfg(feature = "_rt-async-global-executor")] - { - use async_io_global_executor::Async; - use std::os::unix::net::UnixStream; - - let stream = Async::::connect(path).await?; - - return Ok(with_socket.with_socket(stream).await); - } - - #[cfg(feature = "_rt-async-std")] - { - use async_io_std::Async; - use std::os::unix::net::UnixStream; + cfg_if! { + if #[cfg(feature = "_rt-async-global-executor")] { + use async_io_global_executor::Async; + use std::os::unix::net::UnixStream; - let stream = Async::::connect(path).await?; + let stream = Async::::connect(path).await?; - return Ok(with_socket.with_socket(stream).await); - } + Ok(with_socket.with_socket(stream).await) + } else if #[cfg(feature = "_rt-async-std")] { + use async_io_std::Async; + use std::os::unix::net::UnixStream; - #[cfg(feature = "_rt-smol")] - { - use smol::Async; - use std::os::unix::net::UnixStream; + let stream = Async::::connect(path).await?; - let stream = Async::::connect(path).await?; + Ok(with_socket.with_socket(stream).await) + } else if #[cfg(feature = "_rt-smol")] { + use smol::Async; + use std::os::unix::net::UnixStream; - return Ok(with_socket.with_socket(stream).await); - } + let stream = Async::::connect(path).await?; - #[cfg(not(all( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - )))] - #[allow(unreachable_code)] - { - crate::rt::missing_rt((path, with_socket)) + Ok(with_socket.with_socket(stream).await) + } else { + crate::rt::missing_rt((path, with_socket)) + } } } diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index be5e6e4da2..6cb1293a5e 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -4,12 +4,18 @@ use std::pin::Pin; use std::task::{Context, Poll}; use std::time::Duration; +use cfg_if::cfg_if; + +#[cfg(any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" +))] +pub mod rt_async_io; + #[cfg(feature = "_rt-async-global-executor")] pub mod rt_async_global_executor; -#[cfg(feature = "_rt-async-std")] -pub mod rt_async_std; - #[cfg(feature = "_rt-smol")] pub mod rt_smol; @@ -41,30 +47,19 @@ pub async fn timeout(duration: Duration, f: F) -> Result(f: F) -> F::Output { } } - #[cfg(feature = "_rt-async-global-executor")] - { - return async_io_global_executor::block_on(f); - } - - #[cfg(feature = "_rt-async-std")] - { - return async_std::task::block_on(f); - } - - #[cfg(feature = "_rt-smol")] - { - return smol::block_on(f); + cfg_if! { + if #[cfg(feature = "_rt-async-global-executor")] { + async_io_global_executor::block_on(f) + } else if #[cfg(feature = "_rt-async-std")] { + async_std::task::block_on(f) + } else if #[cfg(feature = "_rt-smol")] { + smol::block_on(f) + } else { + missing_rt(()) + } } - - #[cfg(not(all( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - )))] - #[allow(unreachable_code)] - missing_rt(f) } #[track_caller] diff --git a/sqlx-core/src/rt/rt_async_global_executor/mod.rs b/sqlx-core/src/rt/rt_async_global_executor/mod.rs index e7e802b734..282eb5dbdf 100644 --- a/sqlx-core/src/rt/rt_async_global_executor/mod.rs +++ b/sqlx-core/src/rt/rt_async_global_executor/mod.rs @@ -1,8 +1,6 @@ mod join_handle; pub use join_handle::*; -mod socket; - mod timeout; pub use timeout::*; diff --git a/sqlx-core/src/rt/rt_async_std/mod.rs b/sqlx-core/src/rt/rt_async_io/mod.rs similarity index 100% rename from sqlx-core/src/rt/rt_async_std/mod.rs rename to sqlx-core/src/rt/rt_async_io/mod.rs diff --git a/sqlx-core/src/rt/rt_async_global_executor/socket.rs b/sqlx-core/src/rt/rt_async_io/socket.rs similarity index 83% rename from sqlx-core/src/rt/rt_async_global_executor/socket.rs rename to sqlx-core/src/rt/rt_async_io/socket.rs index d4c088d1c6..6c30f1a181 100644 --- a/sqlx-core/src/rt/rt_async_global_executor/socket.rs +++ b/sqlx-core/src/rt/rt_async_io/socket.rs @@ -3,11 +3,21 @@ use crate::net::Socket; use std::io; use std::io::{Read, Write}; use std::net::{Shutdown, TcpStream}; - use std::task::{Context, Poll}; +use cfg_if::cfg_if; + use crate::io::ReadBuf; -use async_io_global_executor::Async; + +cfg_if! { + if #[cfg(feature = "_rt-async-global-executor")] { + use async_io_global_executor::Async; + } else if #[cfg(feature = "_rt-async-std")] { + use async_io_std::Async; + } else if #[cfg(feature = "_rt-smol")] { + use smol::Async; + } +} impl Socket for Async { fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { diff --git a/sqlx-core/src/rt/rt_async_std/socket.rs b/sqlx-core/src/rt/rt_async_std/socket.rs deleted file mode 100644 index 932a129f94..0000000000 --- a/sqlx-core/src/rt/rt_async_std/socket.rs +++ /dev/null @@ -1,55 +0,0 @@ -use crate::net::Socket; - -use std::io; -use std::io::{Read, Write}; -use std::net::{Shutdown, TcpStream}; - -use std::task::{Context, Poll}; - -use crate::io::ReadBuf; -use async_io_std::Async; - -impl Socket for Async { - fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - self.get_mut().read(buf.init_mut()) - } - - fn try_write(&mut self, buf: &[u8]) -> io::Result { - self.get_mut().write(buf) - } - - fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_readable(cx) - } - - fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_writable(cx) - } - - fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) - } -} - -#[cfg(unix)] -impl Socket for Async { - fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - self.get_mut().read(buf.init_mut()) - } - - fn try_write(&mut self, buf: &[u8]) -> io::Result { - self.get_mut().write(buf) - } - - fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_readable(cx) - } - - fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_writable(cx) - } - - fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - Poll::Ready(self.get_mut().shutdown(Shutdown::Both)) - } -} diff --git a/sqlx-core/src/rt/rt_smol/mod.rs b/sqlx-core/src/rt/rt_smol/mod.rs index 855405a99d..86f2b8c964 100644 --- a/sqlx-core/src/rt/rt_smol/mod.rs +++ b/sqlx-core/src/rt/rt_smol/mod.rs @@ -1,7 +1,5 @@ mod join_handle; pub use join_handle::*; -mod socket; - mod timeout; pub use timeout::*; diff --git a/sqlx-core/src/rt/rt_smol/socket.rs b/sqlx-core/src/rt/rt_smol/socket.rs deleted file mode 100644 index 940e1b4b5d..0000000000 --- a/sqlx-core/src/rt/rt_smol/socket.rs +++ /dev/null @@ -1,55 +0,0 @@ -use crate::net::Socket; - -use std::io; -use std::io::{Read, Write}; -use std::net::{Shutdown, TcpStream}; - -use std::task::{Context, Poll}; - -use crate::io::ReadBuf; -use smol::Async; - -impl Socket for Async { - fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - self.get_ref().read(buf.init_mut()) - } - - fn try_write(&mut self, buf: &[u8]) -> io::Result { - self.get_ref().write(buf) - } - - fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_readable(cx) - } - - fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_writable(cx) - } - - fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) - } -} - -#[cfg(unix)] -impl Socket for Async { - fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { - self.get_ref().read(buf.init_mut()) - } - - fn try_write(&mut self, buf: &[u8]) -> io::Result { - self.get_ref().write(buf) - } - - fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_readable(cx) - } - - fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.poll_writable(cx) - } - - fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll> { - Poll::Ready(self.get_ref().shutdown(Shutdown::Both)) - } -} diff --git a/sqlx-core/src/sync.rs b/sqlx-core/src/sync.rs index c653c42d5c..ed082f752c 100644 --- a/sqlx-core/src/sync.rs +++ b/sqlx-core/src/sync.rs @@ -1,21 +1,11 @@ +use cfg_if::cfg_if; + // For types with identical signatures that don't require runtime support, // we can just arbitrarily pick one to use based on what's enabled. // // We'll generally lean towards Tokio's types as those are more featureful // (including `tokio-console` support) and more widely deployed. -#[cfg(all(feature = "_rt-async-global-executor", not(feature = "_rt-tokio")))] -pub use async_lock::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; - -#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] -pub use async_std::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; - -#[cfg(all(feature = "_rt-smol", not(feature = "_rt-tokio")))] -pub use smol::lock::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; - -#[cfg(feature = "_rt-tokio")] -pub use tokio::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard}; - pub struct AsyncSemaphore { // We use the semaphore from futures-intrusive as the one from async-lock // is missing the ability to add arbitrary permits, and is not guaranteed to be fair: @@ -71,117 +61,93 @@ impl AsyncSemaphore { } pub fn permits(&self) -> usize { - #[cfg(all( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - not(feature = "_rt-tokio") - ))] - return self.inner.permits(); - - #[cfg(feature = "_rt-tokio")] - return self.inner.available_permits(); - - #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - feature = "_rt-tokio" - )))] - crate::rt::missing_rt(()) + cfg_if! { + if #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { + self.inner.permits() + } else if #[cfg(feature = "_rt-tokio")] { + self.inner.available_permits() + } else { + crate::rt::missing_rt(()) + } + } } pub async fn acquire(&self, permits: u32) -> AsyncSemaphoreReleaser<'_> { - #[cfg(all( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - not(feature = "_rt-tokio") - ))] - return AsyncSemaphoreReleaser { - inner: self.inner.acquire(permits as usize).await, - }; - - #[cfg(feature = "_rt-tokio")] - return AsyncSemaphoreReleaser { - inner: self - .inner - // Weird quirk: `tokio::sync::Semaphore` mostly uses `usize` for permit counts, - // but `u32` for this and `try_acquire_many()`. - .acquire_many(permits) - .await - .expect("BUG: we do not expose the `.close()` method"), - }; - - #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - feature = "_rt-tokio" - )))] - crate::rt::missing_rt(permits) + cfg_if! { + if #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { + AsyncSemaphoreReleaser { + inner: self.inner.acquire(permits as usize).await, + } + } else if #[cfg(feature = "_rt-tokio")] { + AsyncSemaphoreReleaser { + inner: self + .inner + // Weird quirk: `tokio::sync::Semaphore` mostly uses `usize` for permit counts, + // but `u32` for this and `try_acquire_many()`. + .acquire_many(permits) + .await + .expect("BUG: we do not expose the `.close()` method"), + } + } else { + crate::rt::missing_rt(permits) + } + } } pub fn try_acquire(&self, permits: u32) -> Option> { - #[cfg(all( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - not(feature = "_rt-tokio") - ))] - return Some(AsyncSemaphoreReleaser { - inner: self.inner.try_acquire(permits as usize)?, - }); - - #[cfg(feature = "_rt-tokio")] - return Some(AsyncSemaphoreReleaser { - inner: self.inner.try_acquire_many(permits).ok()?, - }); - - #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - feature = "_rt-tokio" - )))] - crate::rt::missing_rt(permits) + cfg_if! { + if #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { + Some(AsyncSemaphoreReleaser { + inner: self.inner.try_acquire(permits as usize)?, + }) + } else if #[cfg(feature = "_rt-tokio")] { + Some(AsyncSemaphoreReleaser { + inner: self.inner.try_acquire_many(permits).ok()?, + }) + } else { + crate::rt::missing_rt(permits) + } + } } pub fn release(&self, permits: usize) { - #[cfg(all( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - not(feature = "_rt-tokio") - ))] - return self.inner.release(permits); - - #[cfg(feature = "_rt-tokio")] - return self.inner.add_permits(permits); - - #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - feature = "_rt-tokio" - )))] - crate::rt::missing_rt(permits) + cfg_if! { + if #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { + self.inner.release(permits); + } else if #[cfg(feature = "_rt-tokio")] { + self.inner.add_permits(permits); + } else { + crate::rt::missing_rt(permits); + } + } } } @@ -209,11 +175,9 @@ pub struct AsyncSemaphoreReleaser<'a> { inner: tokio::sync::SemaphorePermit<'a>, #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol", feature = "_rt-tokio" )))] _phantom: std::marker::PhantomData<&'a ()>, @@ -221,32 +185,22 @@ pub struct AsyncSemaphoreReleaser<'a> { impl AsyncSemaphoreReleaser<'_> { pub fn disarm(self) { - #[cfg(all( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - not(feature = "_rt-tokio") - ))] - { - let mut this = self; - this.inner.disarm(); - } - - #[cfg(feature = "_rt-tokio")] - { - self.inner.forget(); + cfg_if! { + if #[cfg(all( + any( + feature = "_rt-async-global-executor", + feature = "_rt-async-std", + feature = "_rt-smol" + ), + not(feature = "_rt-tokio") + ))] { + let mut this = self; + this.inner.disarm(); + } else if #[cfg(feature = "_rt-tokio")] { + self.inner.forget(); + } else { + crate::rt::missing_rt(()); + } } - - #[cfg(not(any( - any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" - ), - feature = "_rt-tokio" - )))] - crate::rt::missing_rt(()) } } diff --git a/sqlx-macros-core/Cargo.toml b/sqlx-macros-core/Cargo.toml index 9be9edc022..273bc52187 100644 --- a/sqlx-macros-core/Cargo.toml +++ b/sqlx-macros-core/Cargo.toml @@ -57,6 +57,7 @@ async-std = { workspace = true, optional = true } smol = { workspace = true, optional = true } tokio = { workspace = true, optional = true } +cfg-if = { workspace = true} dotenvy = { workspace = true } hex = { version = "0.4.3" } diff --git a/sqlx-macros-core/src/lib.rs b/sqlx-macros-core/src/lib.rs index a00021ea82..bacb62f52e 100644 --- a/sqlx-macros-core/src/lib.rs +++ b/sqlx-macros-core/src/lib.rs @@ -19,6 +19,8 @@ feature(track_path) )] +use cfg_if::cfg_if; + #[cfg(feature = "macros")] use crate::query::QueryDriver; @@ -55,41 +57,29 @@ pub fn block_on(f: F) -> F::Output where F: std::future::Future, { - #[cfg(feature = "_rt-tokio")] - { - use once_cell::sync::Lazy; - use tokio::runtime::{self, Runtime}; - - // We need a single, persistent Tokio runtime since we're caching connections, - // otherwise we'll get "IO driver has terminated" errors. - static TOKIO_RT: Lazy = Lazy::new(|| { - runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to start Tokio runtime") - }); - - TOKIO_RT.block_on(f) - } + cfg_if! { + if #[cfg(feature = "_rt-async-global-executor")] { + sqlx_core::rt::test_block_on(f) + } else if #[cfg(feature = "_rt-async-std")] { + async_std::task::block_on(f) + } else if #[cfg(feature = "_rt-smol")] { + sqlx_core::rt::test_block_on(f) + } else if #[cfg(feature = "_rt-tokio")] { + use once_cell::sync::Lazy; + use tokio::runtime::{self, Runtime}; - #[cfg(all( - any(feature = "_rt-async-global-executor", feature = "_rt-smol"), - not(feature = "_rt-tokio") - ))] - { - sqlx_core::rt::test_block_on(f) - } + // We need a single, persistent Tokio runtime since we're caching connections, + // otherwise we'll get "IO driver has terminated" errors. + static TOKIO_RT: Lazy = Lazy::new(|| { + runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start Tokio runtime") + }); - #[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))] - { - async_std::task::block_on(f) + TOKIO_RT.block_on(f) + } else { + sqlx_core::rt::missing_rt(f) + } } - - #[cfg(not(any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol", - feature = "_rt-tokio" - )))] - sqlx_core::rt::missing_rt(f) } From 4eadb2450652440b1809d1afd3e86e196b444eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 16:18:20 +0100 Subject: [PATCH 12/28] Warning --- sqlx-core/src/rt/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 6cb1293a5e..6813fab0d5 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -177,7 +177,7 @@ pub fn test_block_on(f: F) -> F::Output { } else if #[cfg(feature = "_rt-smol")] { smol::block_on(f) } else { - missing_rt(()) + missing_rt(f) } } } From aa29a3ee53edd521aa0a36b28a7a2f8c640ba458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 16:26:06 +0100 Subject: [PATCH 13/28] Add executors to test matrix --- .github/workflows/sqlx.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index 7f573a6349..972abe1061 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-std, tokio ] + runtime: [ async-global-executor, async-std, smol, tokio ] tls: [ native-tls, rustls, none ] steps: - uses: actions/checkout@v4 @@ -118,7 +118,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-std, tokio ] + runtime: [ async-global-executor, async-std, smol, tokio ] linking: [ sqlite, sqlite-unbundled ] needs: check steps: @@ -187,7 +187,7 @@ jobs: strategy: matrix: postgres: [ 17, 13 ] - runtime: [ async-std, tokio ] + runtime: [ async-global-executor, async-std, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -288,7 +288,7 @@ jobs: strategy: matrix: mysql: [ 8 ] - runtime: [ async-std, tokio ] + runtime: [ async-global-executor, async-std, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -377,7 +377,7 @@ jobs: strategy: matrix: mariadb: [ verylatest, 11_4, 10_11, 10_4 ] - runtime: [ async-std, tokio ] + runtime: [ async-global-executor, async-std, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: From 89faf0edc51b083136ad3cfd9a0a09fd98da5d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 17:01:12 +0100 Subject: [PATCH 14/28] Fix of skipping code sqlite due to mismatch in cargo feature names --- sqlx-cli/src/database.rs | 2 +- sqlx-cli/src/opt.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sqlx-cli/src/database.rs b/sqlx-cli/src/database.rs index 7a2056ab35..ce27b83ab9 100644 --- a/sqlx-cli/src/database.rs +++ b/sqlx-cli/src/database.rs @@ -11,7 +11,7 @@ pub async fn create(connect_opts: &ConnectOpts) -> anyhow::Result<()> { let exists = crate::retry_connect_errors(connect_opts, Any::database_exists).await?; if !exists { - #[cfg(feature = "_sqlite")] + #[cfg(any(feature = "sqlite", feature = "sqlite-unbundled"))] sqlx::sqlite::CREATE_DB_WAL.store( connect_opts.sqlite_create_db_wal, std::sync::atomic::Ordering::Release, diff --git a/sqlx-cli/src/opt.rs b/sqlx-cli/src/opt.rs index 07058aa147..0b771921b9 100644 --- a/sqlx-cli/src/opt.rs +++ b/sqlx-cli/src/opt.rs @@ -262,7 +262,7 @@ pub struct ConnectOpts { /// However, if your application sets a `journal_mode` on `SqliteConnectOptions` to something /// other than `Wal`, then it will have to take the database file out of WAL mode on connecting, /// which requires an exclusive lock and may return a `database is locked` (`SQLITE_BUSY`) error. - #[cfg(feature = "_sqlite")] + #[cfg(any(feature = "sqlite", feature = "sqlite-unbundled"))] #[clap(long, action = clap::ArgAction::Set, default_value = "true")] pub sqlite_create_db_wal: bool, } From ddcf4ed90173a3b6df75f8d63d1679dfaf548437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 17:40:02 +0100 Subject: [PATCH 15/28] Smol executor isolated --- Cargo.lock | 21 +-------- Cargo.toml | 13 +----- rust-toolchain.toml | 2 +- sqlx-core/Cargo.toml | 14 +----- sqlx-core/src/net/socket/mod.rs | 46 ++----------------- sqlx-core/src/rt/mod.rs | 38 +++------------ .../rt_async_global_executor/join_handle.rs | 30 ------------ .../src/rt/rt_async_global_executor/mod.rs | 8 ---- .../rt/rt_async_global_executor/timeout.rs | 20 -------- .../rt/rt_async_global_executor/yield_now.rs | 28 ----------- sqlx-core/src/rt/rt_async_io/socket.rs | 6 +-- sqlx-core/src/sync.rs | 10 ---- sqlx-macros-core/Cargo.toml | 2 - sqlx-macros-core/src/lib.rs | 4 +- sqlx-macros/Cargo.toml | 1 - 15 files changed, 20 insertions(+), 223 deletions(-) delete mode 100644 sqlx-core/src/rt/rt_async_global_executor/join_handle.rs delete mode 100644 sqlx-core/src/rt/rt_async_global_executor/mod.rs delete mode 100644 sqlx-core/src/rt/rt_async_global_executor/timeout.rs delete mode 100644 sqlx-core/src/rt/rt_async_global_executor/yield_now.rs diff --git a/Cargo.lock b/Cargo.lock index fe6b4cf9b3..5dbae6de3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -224,20 +224,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "async-global-executor" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" -dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-io 2.4.0", - "async-lock 3.4.0", - "blocking", - "futures-lite 2.5.0", -] - [[package]] name = "async-io" version = "1.13.0" @@ -353,7 +339,7 @@ checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", - "async-global-executor 2.4.1", + "async-global-executor", "async-io 2.4.0", "async-lock 3.4.0", "crossbeam-utils", @@ -3514,11 +3500,7 @@ dependencies = [ name = "sqlx-core" version = "0.8.3" dependencies = [ - "async-global-executor 3.1.0", "async-io 1.13.0", - "async-io 2.4.0", - "async-lock 3.4.0", - "async-net", "async-std", "base64 0.22.1", "bigdecimal", @@ -3706,7 +3688,6 @@ dependencies = [ name = "sqlx-macros-core" version = "0.8.3" dependencies = [ - "async-global-executor 3.1.0", "async-std", "cfg-if", "dotenvy", diff --git a/Cargo.toml b/Cargo.toml index 48c60c6bfd..55998cac87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,8 @@ authors = [ "Chloe Ross ", "Daniel Akhterov ", ] -rust-version = "1.80.0" +# TODO: enable this for 0.9.0 +# rust-version = "1.80.0" [package] name = "sqlx" @@ -75,7 +76,6 @@ _unstable-all-types = [ ] # Base runtime features without TLS -runtime-async-global-executor = ["_rt-async-global-executor", "sqlx-core/_rt-async-global-executor", "sqlx-macros?/_rt-async-global-executor"] runtime-async-std = ["_rt-async-std", "sqlx-core/_rt-async-std", "sqlx-macros?/_rt-async-std"] runtime-smol = ["_rt-smol", "sqlx-core/_rt-smol", "sqlx-macros?/_rt-smol"] runtime-tokio = ["_rt-tokio", "sqlx-core/_rt-tokio", "sqlx-macros?/_rt-tokio"] @@ -93,9 +93,6 @@ tls-none = [] # Legacy Runtime + TLS features -runtime-async-global-executor-native-tls = ["runtime-async-global-executor", "tls-native-tls"] -runtime-async-global-executor-rustls = ["runtime-async-global-executor", "tls-rustls-ring"] - runtime-async-std-native-tls = ["runtime-async-std", "tls-native-tls"] runtime-async-std-rustls = ["runtime-async-std", "tls-rustls-ring"] @@ -106,7 +103,6 @@ runtime-tokio-native-tls = ["runtime-tokio", "tls-native-tls"] runtime-tokio-rustls = ["runtime-tokio", "tls-rustls-ring"] # for conditional compilation -_rt-async-global-executor = [] _rt-async-std = [] _rt-smol = [] _rt-tokio = [] @@ -164,11 +160,6 @@ cfg-if = "1.0.0" dotenvy = { version = "0.15.0", default-features = false } # Runtimes -[workspace.dependencies.async-global-executor] -version = "3.1" -default-features = false -features = ["async-io"] - [workspace.dependencies.async-std] version = "1.12" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 16beae9c11..29f0b09695 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ # Note: should NOT increase during a minor/patch release cycle [toolchain] -channel = "1.80" +channel = "1.78" profile = "minimal" diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index cf1da37052..bc8ab7cc17 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -19,13 +19,7 @@ any = [] json = ["serde", "serde_json"] # for conditional compilation -_rt-async-global-executor = [ - "async-global-executor", - "async-io-global-executor", - "async-lock", - "async-net", -] -_rt-async-std = ["async-std", "async-io-std"] +_rt-async-std = ["async-std", "async-io"] _rt-smol = ["smol"] _rt-tokio = ["tokio", "tokio-stream"] _tls-native-tls = ["native-tls"] @@ -40,7 +34,6 @@ offline = ["serde", "either/serde"] [dependencies] # Runtimes -async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } smol = { workspace = true, optional = true } tokio = { workspace = true, optional = true } @@ -61,10 +54,7 @@ ipnetwork = { workspace = true, optional = true } mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } -async-io-global-executor = { package = "async-io", version = "2.2", optional = true } -async-io-std = { package = "async-io", version = "1.9.0", optional = true } -async-lock = { version = "3.4.0", optional = true } -async-net = { package = "async-net", version = "2.0.0", optional = true } +async-io = { package = "async-io", version = "1.9.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" cfg-if = { workspace = true } diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index 8d3d71905d..62078becac 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -204,39 +204,8 @@ pub async fn connect_tcp( } cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - use async_net::resolve; - use std::net::TcpStream; - - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in resolve((host, port)).await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), - } - } - - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - Err(match last_err { - Some(err) => err, - None => io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ), - } - .into()) - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; + if #[cfg(feature = "_rt-async-std")] { + use async_io::Async; use async_std::net::ToSocketAddrs; use std::net::TcpStream; @@ -322,15 +291,8 @@ pub async fn connect_uds, Ws: WithSocket>( } cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - use std::os::unix::net::UnixStream; - - let stream = Async::::connect(path).await?; - - Ok(with_socket.with_socket(stream).await) - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; + if #[cfg(feature = "_rt-async-std")] { + use async_io::Async; use std::os::unix::net::UnixStream; let stream = Async::::connect(path).await?; diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 6813fab0d5..91e2891033 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -7,15 +7,11 @@ use std::time::Duration; use cfg_if::cfg_if; #[cfg(any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ))] pub mod rt_async_io; -#[cfg(feature = "_rt-async-global-executor")] -pub mod rt_async_global_executor; - #[cfg(feature = "_rt-smol")] pub mod rt_smol; @@ -27,8 +23,6 @@ pub mod rt_tokio; pub struct TimeoutError; pub enum JoinHandle { - #[cfg(feature = "_rt-async-global-executor")] - AsyncGlobalExecutor(rt_async_global_executor::JoinHandle), #[cfg(feature = "_rt-async-std")] AsyncStd(async_std::task::JoinHandle), #[cfg(feature = "_rt-smol")] @@ -48,9 +42,7 @@ pub async fn timeout(duration: Duration, f: F) -> Result(f: F) -> F::Output { } cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - async_io_global_executor::block_on(f) - } else if #[cfg(feature = "_rt-async-std")] { + if #[cfg(feature = "_rt-async-std")] { async_std::task::block_on(f) } else if #[cfg(feature = "_rt-smol")] { smol::block_on(f) @@ -188,7 +166,7 @@ pub fn missing_rt(_unused: T) -> ! { panic!("this functionality requires a Tokio context") } - panic!("one of the `runtime-async-global-executor`, `runtime-async-std`, `runtime-smol`, or `runtime-tokio` feature must be enabled") + panic!("one of the `runtime-async-std`, `runtime-smol`, or `runtime-tokio` feature must be enabled") } impl Future for JoinHandle { @@ -197,8 +175,6 @@ impl Future for JoinHandle { #[track_caller] fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { match &mut *self { - #[cfg(feature = "_rt-async-global-executor")] - Self::AsyncGlobalExecutor(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-async-std")] Self::AsyncStd(handle) => Pin::new(handle).poll(cx), #[cfg(feature = "_rt-smol")] diff --git a/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs b/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs deleted file mode 100644 index 580883e21f..0000000000 --- a/sqlx-core/src/rt/rt_async_global_executor/join_handle.rs +++ /dev/null @@ -1,30 +0,0 @@ -use std::{ - future::Future, - pin::Pin, - task::{Context, Poll}, -}; - -use async_global_executor::Task; - -pub struct JoinHandle { - pub task: Option>, -} - -impl Drop for JoinHandle { - fn drop(&mut self) { - if let Some(task) = self.task.take() { - task.detach(); - } - } -} - -impl Future for JoinHandle { - type Output = T; - - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - match self.task.as_mut() { - Some(task) => Future::poll(Pin::new(task), cx), - None => unreachable!("JoinHandle polled after dropping"), - } - } -} diff --git a/sqlx-core/src/rt/rt_async_global_executor/mod.rs b/sqlx-core/src/rt/rt_async_global_executor/mod.rs deleted file mode 100644 index 282eb5dbdf..0000000000 --- a/sqlx-core/src/rt/rt_async_global_executor/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod join_handle; -pub use join_handle::*; - -mod timeout; -pub use timeout::*; - -pub mod yield_now; -pub use yield_now::*; diff --git a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs deleted file mode 100644 index 8188758d93..0000000000 --- a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::{future::Future, pin::pin, time::Duration}; - -use futures_util::future::{select, Either}; - -use crate::rt::TimeoutError; - -pub async fn sleep(duration: Duration) { - timeout_future(duration).await; -} - -pub async fn timeout(duration: Duration, future: F) -> Result { - match select(pin!(future), timeout_future(duration)).await { - Either::Left((result, _)) => Ok(result), - Either::Right(_) => Err(TimeoutError), - } -} - -fn timeout_future(duration: Duration) -> impl Future { - async_io_global_executor::Timer::after(duration) -} diff --git a/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs b/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs deleted file mode 100644 index 1adb55e0f4..0000000000 --- a/sqlx-core/src/rt/rt_async_global_executor/yield_now.rs +++ /dev/null @@ -1,28 +0,0 @@ -use std::{ - future::Future, - pin::Pin, - task::{Context, Poll}, -}; - -pub fn yield_now() -> impl Future { - YieldNow(false) -} - -struct YieldNow(bool); - -impl Future for YieldNow { - type Output = (); - - // The futures executor is implemented as a FIFO queue, so all this future - // does is re-schedule the future back to the end of the queue, giving room - // for other futures to progress. - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - if !self.0 { - self.0 = true; - cx.waker().wake_by_ref(); - Poll::Pending - } else { - Poll::Ready(()) - } - } -} diff --git a/sqlx-core/src/rt/rt_async_io/socket.rs b/sqlx-core/src/rt/rt_async_io/socket.rs index 6c30f1a181..7001b5cdb9 100644 --- a/sqlx-core/src/rt/rt_async_io/socket.rs +++ b/sqlx-core/src/rt/rt_async_io/socket.rs @@ -10,10 +10,8 @@ use cfg_if::cfg_if; use crate::io::ReadBuf; cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; + if #[cfg(feature = "_rt-async-std")] { + use async_io::Async; } else if #[cfg(feature = "_rt-smol")] { use smol::Async; } diff --git a/sqlx-core/src/sync.rs b/sqlx-core/src/sync.rs index ed082f752c..70c8440dbe 100644 --- a/sqlx-core/src/sync.rs +++ b/sqlx-core/src/sync.rs @@ -18,7 +18,6 @@ pub struct AsyncSemaphore { // https://github.com/launchbadge/sqlx/issues/1668 #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -34,7 +33,6 @@ impl AsyncSemaphore { #[track_caller] pub fn new(fair: bool, permits: usize) -> Self { if cfg!(not(any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol", feature = "_rt-tokio" @@ -45,7 +43,6 @@ impl AsyncSemaphore { AsyncSemaphore { #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -64,7 +61,6 @@ impl AsyncSemaphore { cfg_if! { if #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -83,7 +79,6 @@ impl AsyncSemaphore { cfg_if! { if #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -112,7 +107,6 @@ impl AsyncSemaphore { cfg_if! { if #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -135,7 +129,6 @@ impl AsyncSemaphore { cfg_if! { if #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -163,7 +156,6 @@ pub struct AsyncSemaphoreReleaser<'a> { // https://github.com/launchbadge/sqlx/issues/1668 #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), @@ -175,7 +167,6 @@ pub struct AsyncSemaphoreReleaser<'a> { inner: tokio::sync::SemaphorePermit<'a>, #[cfg(not(any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol", feature = "_rt-tokio" @@ -188,7 +179,6 @@ impl AsyncSemaphoreReleaser<'_> { cfg_if! { if #[cfg(all( any( - feature = "_rt-async-global-executor", feature = "_rt-async-std", feature = "_rt-smol" ), diff --git a/sqlx-macros-core/Cargo.toml b/sqlx-macros-core/Cargo.toml index 273bc52187..cf1be27522 100644 --- a/sqlx-macros-core/Cargo.toml +++ b/sqlx-macros-core/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true default = [] # for conditional compilation -_rt-async-global-executor = ["async-global-executor", "sqlx-core/_rt-async-global-executor"] _rt-async-std = ["async-std", "sqlx-core/_rt-async-std"] _rt-smol = ["smol", "sqlx-core/_rt-smol"] _rt-tokio = ["tokio", "sqlx-core/_rt-tokio"] @@ -52,7 +51,6 @@ sqlx-mysql = { workspace = true, features = ["offline", "migrate"], optional = t sqlx-postgres = { workspace = true, features = ["offline", "migrate"], optional = true } sqlx-sqlite = { workspace = true, features = ["offline", "migrate"], optional = true } -async-global-executor = { workspace = true, optional = true } async-std = { workspace = true, optional = true } smol = { workspace = true, optional = true } tokio = { workspace = true, optional = true } diff --git a/sqlx-macros-core/src/lib.rs b/sqlx-macros-core/src/lib.rs index bacb62f52e..578f7b0152 100644 --- a/sqlx-macros-core/src/lib.rs +++ b/sqlx-macros-core/src/lib.rs @@ -58,9 +58,7 @@ where F: std::future::Future, { cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - sqlx_core::rt::test_block_on(f) - } else if #[cfg(feature = "_rt-async-std")] { + if #[cfg(feature = "_rt-async-std")] { async_std::task::block_on(f) } else if #[cfg(feature = "_rt-smol")] { sqlx_core::rt::test_block_on(f) diff --git a/sqlx-macros/Cargo.toml b/sqlx-macros/Cargo.toml index c0fda68ec9..06ba25f1e2 100644 --- a/sqlx-macros/Cargo.toml +++ b/sqlx-macros/Cargo.toml @@ -14,7 +14,6 @@ proc-macro = true default = [] # for conditional compilation -_rt-async-global-executor = ["sqlx-macros-core/_rt-async-global-executor"] _rt-async-std = ["sqlx-macros-core/_rt-async-std"] _rt-smol = ["sqlx-macros-core/_rt-smol"] _rt-tokio = ["sqlx-macros-core/_rt-tokio"] From 653152a58f4825a2c2f7f28ce81faa3dc328b451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 17:43:29 +0100 Subject: [PATCH 16/28] Fix, reduce number of tests, remove async_std --- .github/workflows/sqlx.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index 972abe1061..b44e97d24a 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ smol, tokio ] tls: [ native-tls, rustls, none ] steps: - uses: actions/checkout@v4 @@ -118,7 +118,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ smol, tokio ] linking: [ sqlite, sqlite-unbundled ] needs: check steps: @@ -187,7 +187,7 @@ jobs: strategy: matrix: postgres: [ 17, 13 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -288,7 +288,7 @@ jobs: strategy: matrix: mysql: [ 8 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -377,7 +377,7 @@ jobs: strategy: matrix: mariadb: [ verylatest, 11_4, 10_11, 10_4 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: From d1e91f6a732736988270b6840e935065f8c3ebab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 17:58:14 +0100 Subject: [PATCH 17/28] Fix of test_block_on, regression --- sqlx-core/src/rt/mod.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 91e2891033..104ffe46f9 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -138,22 +138,17 @@ pub async fn yield_now() { #[track_caller] pub fn test_block_on(f: F) -> F::Output { - #[cfg(feature = "_rt-tokio")] - { - if rt_tokio::available() { - return tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to start Tokio runtime") - .block_on(f); - } - } - cfg_if! { if #[cfg(feature = "_rt-async-std")] { async_std::task::block_on(f) } else if #[cfg(feature = "_rt-smol")] { smol::block_on(f) + } else if #[cfg(feature = "_rt-tokio")] { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start Tokio runtime") + .block_on(f) } else { missing_rt(f) } From 5627ca8eee52c257c0c283d53f93b6aa80b765a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 18:18:50 +0100 Subject: [PATCH 18/28] Format fixes --- sqlx-core/src/rt/mod.rs | 5 +---- sqlx-core/src/sync.rs | 21 ++++----------------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 104ffe46f9..54cf02a018 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -6,10 +6,7 @@ use std::time::Duration; use cfg_if::cfg_if; -#[cfg(any( - feature = "_rt-async-std", - feature = "_rt-smol" -))] +#[cfg(any(feature = "_rt-async-std", feature = "_rt-smol"))] pub mod rt_async_io; #[cfg(feature = "_rt-smol")] diff --git a/sqlx-core/src/sync.rs b/sqlx-core/src/sync.rs index 70c8440dbe..6188896dc4 100644 --- a/sqlx-core/src/sync.rs +++ b/sqlx-core/src/sync.rs @@ -17,10 +17,7 @@ pub struct AsyncSemaphore { // in MIRI due to the necessitated mutable aliasing): // https://github.com/launchbadge/sqlx/issues/1668 #[cfg(all( - any( - feature = "_rt-async-std", - feature = "_rt-smol" - ), + any(feature = "_rt-async-std", feature = "_rt-smol"), not(feature = "_rt-tokio") ))] inner: futures_intrusive::sync::Semaphore, @@ -42,10 +39,7 @@ impl AsyncSemaphore { AsyncSemaphore { #[cfg(all( - any( - feature = "_rt-async-std", - feature = "_rt-smol" - ), + any(feature = "_rt-async-std", feature = "_rt-smol"), not(feature = "_rt-tokio") ))] inner: futures_intrusive::sync::Semaphore::new(fair, permits), @@ -155,10 +149,7 @@ pub struct AsyncSemaphoreReleaser<'a> { // in MIRI due to the necessitated mutable aliasing): // https://github.com/launchbadge/sqlx/issues/1668 #[cfg(all( - any( - feature = "_rt-async-std", - feature = "_rt-smol" - ), + any(feature = "_rt-async-std", feature = "_rt-smol"), not(feature = "_rt-tokio") ))] inner: futures_intrusive::sync::SemaphoreReleaser<'a>, @@ -166,11 +157,7 @@ pub struct AsyncSemaphoreReleaser<'a> { #[cfg(feature = "_rt-tokio")] inner: tokio::sync::SemaphorePermit<'a>, - #[cfg(not(any( - feature = "_rt-async-std", - feature = "_rt-smol", - feature = "_rt-tokio" - )))] + #[cfg(not(any(feature = "_rt-async-std", feature = "_rt-smol", feature = "_rt-tokio")))] _phantom: std::marker::PhantomData<&'a ()>, } From c7fa793b0525fb383f25371b69b2cf5260550025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 17 Mar 2025 20:59:58 +0100 Subject: [PATCH 19/28] async-global-executor added --- .github/workflows/sqlx.yml | 10 +++++----- sqlx-core/src/rt/mod.rs | 17 ++++++----------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index 972abe1061..653eee718b 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ async-global-executor, smol, tokio ] tls: [ native-tls, rustls, none ] steps: - uses: actions/checkout@v4 @@ -118,7 +118,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ async-global-executor, smol, tokio ] linking: [ sqlite, sqlite-unbundled ] needs: check steps: @@ -187,7 +187,7 @@ jobs: strategy: matrix: postgres: [ 17, 13 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ async-global-executor, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -288,7 +288,7 @@ jobs: strategy: matrix: mysql: [ 8 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ async-global-executor, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: @@ -377,7 +377,7 @@ jobs: strategy: matrix: mariadb: [ verylatest, 11_4, 10_11, 10_4 ] - runtime: [ async-global-executor, async-std, smol, tokio ] + runtime: [ async-global-executor, smol, tokio ] tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] needs: check steps: diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 6813fab0d5..0451092691 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -158,17 +158,6 @@ pub async fn yield_now() { #[track_caller] pub fn test_block_on(f: F) -> F::Output { - #[cfg(feature = "_rt-tokio")] - { - if rt_tokio::available() { - return tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to start Tokio runtime") - .block_on(f); - } - } - cfg_if! { if #[cfg(feature = "_rt-async-global-executor")] { async_io_global_executor::block_on(f) @@ -176,6 +165,12 @@ pub fn test_block_on(f: F) -> F::Output { async_std::task::block_on(f) } else if #[cfg(feature = "_rt-smol")] { smol::block_on(f) + } else if #[cfg(feature = "_rt-tokio")] { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start Tokio runtime") + .block_on(f) } else { missing_rt(f) } From 8d6377bae8441f40c8887be05ffa1d2d217ab34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 13:37:44 +0200 Subject: [PATCH 20/28] async-std changed to 1.13 --- .github/workflows/sqlx.yml | 2 +- Cargo.lock | 211 ++++-------------- Cargo.toml | 2 +- sqlx-core/Cargo.toml | 10 +- sqlx-core/src/net/socket/mod.rs | 164 +++++--------- sqlx-core/src/rt/mod.rs | 32 +-- .../src/rt/rt_async_global_executor/mod.rs | 3 - .../rt/rt_async_global_executor/timeout.rs | 20 -- sqlx-core/src/rt/rt_async_io/mod.rs | 3 + sqlx-core/src/rt/rt_async_io/socket.rs | 12 +- .../rt/{rt_smol => rt_async_io}/timeout.rs | 2 +- sqlx-core/src/rt/rt_smol/mod.rs | 3 - 12 files changed, 120 insertions(+), 344 deletions(-) delete mode 100644 sqlx-core/src/rt/rt_async_global_executor/timeout.rs rename sqlx-core/src/rt/{rt_smol => rt_async_io}/timeout.rs (93%) diff --git a/.github/workflows/sqlx.yml b/.github/workflows/sqlx.yml index 653eee718b..964e648274 100644 --- a/.github/workflows/sqlx.yml +++ b/.github/workflows/sqlx.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - runtime: [ async-global-executor, smol, tokio ] + runtime: [ async-std, async-global-executor, smol, tokio ] tls: [ native-tls, rustls, none ] steps: - uses: actions/checkout@v4 diff --git a/Cargo.lock b/Cargo.lock index fe6b4cf9b3..80f2e5923c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -193,8 +193,8 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.3.0", - "futures-lite 2.5.0", + "fastrand", + "futures-lite", "slab", ] @@ -204,9 +204,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.4.0", + "async-lock", "blocking", - "futures-lite 2.5.0", + "futures-lite", ] [[package]] @@ -217,10 +217,10 @@ checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ "async-channel 2.3.1", "async-executor", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "blocking", - "futures-lite 2.5.0", + "futures-lite", "once_cell", ] @@ -232,30 +232,10 @@ checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" dependencies = [ "async-channel 2.3.1", "async-executor", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "blocking", - "futures-lite 2.5.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.28", - "slab", - "socket2 0.4.10", - "waker-fn", + "futures-lite", ] [[package]] @@ -264,28 +244,19 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.4.0", + "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.5.0", + "futures-lite", "parking", - "polling 3.7.4", - "rustix 0.38.43", + "polling", + "rustix", "slab", "tracing", "windows-sys 0.59.0", ] -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - [[package]] name = "async-lock" version = "3.4.0" @@ -303,9 +274,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.4.0", + "async-io", "blocking", - "futures-lite 2.5.0", + "futures-lite", ] [[package]] @@ -315,15 +286,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "async-signal", "async-task", "blocking", "cfg-if", "event-listener 5.4.0", - "futures-lite 2.5.0", - "rustix 0.38.43", + "futures-lite", + "rustix", "tracing", ] @@ -333,13 +304,13 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.43", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -354,13 +325,13 @@ dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor 2.4.1", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 2.5.0", + "futures-lite", "gloo-timers", "kv-log-macro", "log", @@ -638,7 +609,7 @@ dependencies = [ "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.5.0", + "futures-lite", "piper", ] @@ -1348,15 +1319,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.3.0" @@ -1508,28 +1470,13 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-lite" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.3.0", + "fastrand", "futures-core", "futures-io", "parking", @@ -1673,12 +1620,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hermit-abi" version = "0.4.0" @@ -1780,7 +1721,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.8", + "socket2", "tokio", "tower-service", "tracing", @@ -2002,15 +1943,10 @@ dependencies = [ ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "ipnet" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "ipnetwork" @@ -2027,7 +1963,7 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi", "libc", "windows-sys 0.52.0", ] @@ -2159,12 +2095,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -2601,7 +2531,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.3.0", + "fastrand", "futures-io", ] @@ -2660,22 +2590,6 @@ dependencies = [ "plotters-backend", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "polling" version = "3.7.4" @@ -2684,9 +2598,9 @@ checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.4.0", + "hermit-abi", "pin-project-lite", - "rustix 0.38.43", + "rustix", "tracing", "windows-sys 0.59.0", ] @@ -3053,20 +2967,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustix" -version = "0.37.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.43" @@ -3076,7 +2976,7 @@ dependencies = [ "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.15", + "linux-raw-sys", "windows-sys 0.59.0", ] @@ -3409,22 +3309,12 @@ dependencies = [ "async-channel 2.3.1", "async-executor", "async-fs", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "async-net", "async-process", "blocking", - "futures-lite 2.5.0", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", + "futures-lite", ] [[package]] @@ -3515,9 +3405,8 @@ name = "sqlx-core" version = "0.8.3" dependencies = [ "async-global-executor 3.1.0", - "async-io 1.13.0", - "async-io 2.4.0", - "async-lock 3.4.0", + "async-io", + "async-lock", "async-net", "async-std", "base64 0.22.1", @@ -3538,6 +3427,7 @@ dependencies = [ "hashbrown 0.15.2", "hashlink", "indexmap 2.7.0", + "ipnet", "ipnetwork", "log", "mac_address", @@ -3797,6 +3687,7 @@ dependencies = [ "hkdf", "hmac", "home", + "ipnet", "ipnetwork", "itoa", "log", @@ -4061,10 +3952,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.3.0", + "fastrand", "getrandom", "once_cell", - "rustix 0.38.43", + "rustix", "windows-sys 0.59.0", ] @@ -4202,7 +4093,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.8", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -4574,12 +4465,6 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -4706,7 +4591,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.43", + "rustix", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5e5b52c773..75a20af97a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -173,7 +173,7 @@ default-features = false features = ["async-io"] [workspace.dependencies.async-std] -version = "1.12" +version = "1.13" [workspace.dependencies.smol] version = "2.0" diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index f218d3047e..02bfc56c53 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -21,12 +21,13 @@ json = ["serde", "serde_json"] # for conditional compilation _rt-async-global-executor = [ "async-global-executor", - "async-io-global-executor", "async-lock", "async-net", + "_rt-async-io", ] -_rt-async-std = ["async-std", "async-io-std"] -_rt-smol = ["smol"] +_rt-async-io = ["async-io"] +_rt-async-std = ["async-std", "_rt-async-io"] +_rt-smol = ["smol", "_rt-async-io"] _rt-tokio = ["tokio", "tokio-stream"] _tls-native-tls = ["native-tls"] _tls-rustls-aws-lc-rs = ["_tls-rustls", "rustls/aws-lc-rs", "webpki-roots"] @@ -62,8 +63,7 @@ ipnetwork = { workspace = true, optional = true } mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } -async-io-global-executor = { package = "async-io", version = "2.2", optional = true } -async-io-std = { package = "async-io", version = "1.9.0", optional = true } +async-io = { version = "2.2", optional = true } async-lock = { version = "3.4.0", optional = true } async-net = { package = "async-net", version = "2.0.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index 8d3d71905d..7882b4b23f 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -1,15 +1,18 @@ -use std::future::Future; use std::io; use std::path::Path; use std::pin::Pin; use std::task::{ready, Context, Poll}; +use std::{ + future::Future, + net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, ToSocketAddrs}, +}; use bytes::BufMut; use cfg_if::cfg_if; pub use buffered::{BufferedSocket, WriteBuffer}; -use crate::io::ReadBuf; +use crate::{io::ReadBuf, rt::spawn_blocking}; mod buffered; @@ -193,112 +196,65 @@ pub async fn connect_tcp( // IPv6 addresses in URLs will be wrapped in brackets and the `url` crate doesn't trim those. let host = host.trim_matches(&['[', ']'][..]); + let addresses = if let Ok(addr) = host.parse::() { + let addr = SocketAddrV4::new(addr, port); + vec![SocketAddr::V4(addr)].into_iter() + } else if let Ok(addr) = host.parse::() { + let addr = SocketAddrV6::new(addr, port, 0, 0); + vec![SocketAddr::V6(addr)].into_iter() + } else { + let host = host.to_string(); + spawn_blocking(move || { + let addr = (host.as_str(), port); + ToSocketAddrs::to_socket_addrs(&addr) + }) + .await? + }; + + let mut last_err = None; + + // Loop through all the Socket Addresses that the hostname resolves to + for socket_addr in addresses { + match connect_tcp_address(socket_addr).await { + Ok(stream) => return Ok(with_socket.with_socket(stream).await), + Err(e) => last_err = Some(e), + } + } + + // If we reach this point, it means we failed to connect to any of the addresses. + // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. + Err(match last_err { + Some(err) => err, + None => io::Error::new( + io::ErrorKind::AddrNotAvailable, + "Hostname did not resolve to any addresses", + ) + .into(), + }) +} + +async fn connect_tcp_address(socket_addr: SocketAddr) -> crate::Result { #[cfg(feature = "_rt-tokio")] if crate::rt::rt_tokio::available() { use tokio::net::TcpStream; - let stream = TcpStream::connect((host, port)).await?; + let stream = TcpStream::connect(socket_addr).await?; stream.set_nodelay(true)?; - return Ok(with_socket.with_socket(stream).await); + return Ok(stream); } cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - use async_net::resolve; - use std::net::TcpStream; - - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in resolve((host, port)).await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), - } - } - - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - Err(match last_err { - Some(err) => err, - None => io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ), - } - .into()) - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; - use async_std::net::ToSocketAddrs; + if #[cfg(feature = "_rt-async-io")] { + use async_io::Async; use std::net::TcpStream; - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in (host, port).to_socket_addrs().await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), - } - } + let stream = Async::::connect(socket_addr).await?; + stream.get_ref().set_nodelay(true)?; - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - Err(match last_err { - Some(err) => err, - None => io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ), - } - .into()) - } else if #[cfg(feature = "_rt-smol")] { - use smol::net::resolve; - use smol::Async; - use std::net::TcpStream; - - let mut last_err = None; - - // Loop through all the Socket Addresses that the hostname resolves to - for socket_addr in resolve((host, port)).await? { - let stream = Async::::connect(socket_addr) - .await - .and_then(|s| { - s.get_ref().set_nodelay(true)?; - Ok(s) - }); - match stream { - Ok(stream) => return Ok(with_socket.with_socket(stream).await), - Err(e) => last_err = Some(e), - } - } - - // If we reach this point, it means we failed to connect to any of the addresses. - // Return the last error we encountered, or a custom error if the hostname didn't resolve to any address. - Err(match last_err { - Some(err) => err, - None => io::Error::new( - io::ErrorKind::AddrNotAvailable, - "Hostname did not resolve to any addresses", - ), - } - .into()) + Ok(stream) } else { - crate::rt::missing_rt((host, port, with_socket)) + crate::rt::missing_rt(socket_addr) } } } @@ -322,22 +278,8 @@ pub async fn connect_uds, Ws: WithSocket>( } cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - use std::os::unix::net::UnixStream; - - let stream = Async::::connect(path).await?; - - Ok(with_socket.with_socket(stream).await) - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; - use std::os::unix::net::UnixStream; - - let stream = Async::::connect(path).await?; - - Ok(with_socket.with_socket(stream).await) - } else if #[cfg(feature = "_rt-smol")] { - use smol::Async; + if #[cfg(feature = "_rt-async-io")] { + use async_io::Async; use std::os::unix::net::UnixStream; let stream = Async::::connect(path).await?; diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index 0451092691..b2ba10f8ca 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -6,11 +6,7 @@ use std::time::Duration; use cfg_if::cfg_if; -#[cfg(any( - feature = "_rt-async-global-executor", - feature = "_rt-async-std", - feature = "_rt-smol" -))] +#[cfg(feature = "_rt-async-io")] pub mod rt_async_io; #[cfg(feature = "_rt-async-global-executor")] @@ -48,14 +44,8 @@ pub async fn timeout(duration: Duration, f: F) -> Result(f: F) -> F::Output { cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - async_io_global_executor::block_on(f) - } else if #[cfg(feature = "_rt-async-std")] { - async_std::task::block_on(f) - } else if #[cfg(feature = "_rt-smol")] { - smol::block_on(f) + if #[cfg(feature = "_rt-async-io")] { + async_io::block_on(f) } else if #[cfg(feature = "_rt-tokio")] { tokio::runtime::Builder::new_current_thread() .enable_all() diff --git a/sqlx-core/src/rt/rt_async_global_executor/mod.rs b/sqlx-core/src/rt/rt_async_global_executor/mod.rs index 282eb5dbdf..65a56c8764 100644 --- a/sqlx-core/src/rt/rt_async_global_executor/mod.rs +++ b/sqlx-core/src/rt/rt_async_global_executor/mod.rs @@ -1,8 +1,5 @@ mod join_handle; pub use join_handle::*; -mod timeout; -pub use timeout::*; - pub mod yield_now; pub use yield_now::*; diff --git a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs b/sqlx-core/src/rt/rt_async_global_executor/timeout.rs deleted file mode 100644 index 8188758d93..0000000000 --- a/sqlx-core/src/rt/rt_async_global_executor/timeout.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::{future::Future, pin::pin, time::Duration}; - -use futures_util::future::{select, Either}; - -use crate::rt::TimeoutError; - -pub async fn sleep(duration: Duration) { - timeout_future(duration).await; -} - -pub async fn timeout(duration: Duration, future: F) -> Result { - match select(pin!(future), timeout_future(duration)).await { - Either::Left((result, _)) => Ok(result), - Either::Right(_) => Err(TimeoutError), - } -} - -fn timeout_future(duration: Duration) -> impl Future { - async_io_global_executor::Timer::after(duration) -} diff --git a/sqlx-core/src/rt/rt_async_io/mod.rs b/sqlx-core/src/rt/rt_async_io/mod.rs index b6d40b922b..5e4d7074dc 100644 --- a/sqlx-core/src/rt/rt_async_io/mod.rs +++ b/sqlx-core/src/rt/rt_async_io/mod.rs @@ -1 +1,4 @@ mod socket; + +mod timeout; +pub use timeout::*; diff --git a/sqlx-core/src/rt/rt_async_io/socket.rs b/sqlx-core/src/rt/rt_async_io/socket.rs index 6c30f1a181..5837d306c2 100644 --- a/sqlx-core/src/rt/rt_async_io/socket.rs +++ b/sqlx-core/src/rt/rt_async_io/socket.rs @@ -5,20 +5,10 @@ use std::io::{Read, Write}; use std::net::{Shutdown, TcpStream}; use std::task::{Context, Poll}; -use cfg_if::cfg_if; +use async_io::Async; use crate::io::ReadBuf; -cfg_if! { - if #[cfg(feature = "_rt-async-global-executor")] { - use async_io_global_executor::Async; - } else if #[cfg(feature = "_rt-async-std")] { - use async_io_std::Async; - } else if #[cfg(feature = "_rt-smol")] { - use smol::Async; - } -} - impl Socket for Async { fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result { self.get_ref().read(buf.init_mut()) diff --git a/sqlx-core/src/rt/rt_smol/timeout.rs b/sqlx-core/src/rt/rt_async_io/timeout.rs similarity index 93% rename from sqlx-core/src/rt/rt_smol/timeout.rs rename to sqlx-core/src/rt/rt_async_io/timeout.rs index 75afff58ba..b4a779074b 100644 --- a/sqlx-core/src/rt/rt_smol/timeout.rs +++ b/sqlx-core/src/rt/rt_async_io/timeout.rs @@ -16,5 +16,5 @@ pub async fn timeout(duration: Duration, future: F) -> Result impl Future { - smol::Timer::after(duration) + async_io::Timer::after(duration) } diff --git a/sqlx-core/src/rt/rt_smol/mod.rs b/sqlx-core/src/rt/rt_smol/mod.rs index 86f2b8c964..0b620d5116 100644 --- a/sqlx-core/src/rt/rt_smol/mod.rs +++ b/sqlx-core/src/rt/rt_smol/mod.rs @@ -1,5 +1,2 @@ mod join_handle; pub use join_handle::*; - -mod timeout; -pub use timeout::*; From 5e529a94809124278310f69baf42fd88045b7a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 14:12:40 +0200 Subject: [PATCH 21/28] litemap, zerofrom requires rustc 1.81 --- Cargo.lock | 925 ++++++++++++++++++------------------ Cargo.toml | 2 +- rust-toolchain.toml | 2 +- sqlx-macros-core/Cargo.toml | 1 - 4 files changed, 468 insertions(+), 462 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 80f2e5923c..1ef57f13f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -105,19 +105,20 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "argon2" @@ -251,7 +252,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix", + "rustix 0.38.44", "slab", "tracing", "windows-sys 0.59.0", @@ -294,7 +295,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.0", "futures-lite", - "rustix", + "rustix 0.38.44", "tracing", ] @@ -310,7 +311,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix", + "rustix 0.38.44", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -318,9 +319,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ "async-attributes", "async-channel 1.9.0", @@ -351,13 +352,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -383,27 +384,25 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f409eb70b561706bf8abba8ca9c112729c481595893fd06a2dd9af8ed8441148" +checksum = "19b756939cb2f8dc900aa6dcd505e6e2428e9cae7ff7b028c49e3946efa70878" dependencies = [ "aws-lc-sys", - "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.24.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923ded50f602b3007e5e63e3f094c479d9c8a9b42d7f4034e4afe456aa48bfd2" +checksum = "b9f7720b74ed28ca77f90769a71fd8c637a0137f6fae4ae947e1050229cff57f" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "paste", ] [[package]] @@ -473,7 +472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom", + "getrandom 0.2.15", "instant", "pin-project-lite", "rand", @@ -509,15 +508,15 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bigdecimal" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" +checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" dependencies = [ "autocfg", "libm", @@ -532,7 +531,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -545,7 +544,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.96", + "syn 2.0.100", "which", ] @@ -563,9 +562,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.7.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] @@ -615,32 +614,32 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ "borsh-derive", - "cfg_aliases 0.2.1", + "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "1.5.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "regex-automata", @@ -649,9 +648,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytecheck" @@ -683,9 +682,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "camino" @@ -742,9 +741,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.8" +version = "1.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0cf6e91fde44c773c6ee7ec6bba798504641a8bc2eb7e37a04ffbf4dfaa55a" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" dependencies = [ "jobserver", "libc", @@ -766,12 +765,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -780,15 +773,15 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -831,9 +824,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.26" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" dependencies = [ "clap_builder", "clap_derive", @@ -841,9 +834,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.26" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" dependencies = [ "anstream", "anstyle", @@ -853,23 +846,23 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.42" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a7e468e750fa4b6be660e8b5651ad47372e8fb114030b594c2d75d48c5ffd0" +checksum = "c06f5378ea264ad4f82bbc826628b5aad714a75abf6ece087e923010eb937fb6" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -880,9 +873,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.52" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] @@ -917,9 +910,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -962,9 +955,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1062,7 +1055,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "crossterm_winapi", "libc", "mio 0.8.11", @@ -1083,9 +1076,9 @@ dependencies = [ [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-common" @@ -1099,9 +1092,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -1109,27 +1102,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1145,9 +1138,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", "serde", @@ -1190,7 +1183,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1219,9 +1212,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" dependencies = [ "serde", ] @@ -1244,38 +1237,28 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] [[package]] name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.5" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" -dependencies = [ - "serde", - "typeid", -] +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1311,9 +1294,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener 5.4.0", "pin-project-lite", @@ -1365,9 +1348,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" @@ -1395,9 +1378,9 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "fs_extra" @@ -1472,9 +1455,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -1491,7 +1474,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1542,7 +1525,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -1571,9 +1566,9 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", @@ -1626,6 +1621,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hex" version = "0.4.3" @@ -1652,11 +1653,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1689,9 +1690,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1699,12 +1700,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.32" @@ -1730,14 +1725,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1792,9 +1788,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -1816,9 +1812,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -1837,9 +1833,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -1866,7 +1862,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1925,9 +1921,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1959,13 +1955,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi", + "hermit-abi 0.5.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2003,24 +1999,49 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -2052,9 +2073,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" @@ -2078,7 +2099,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "libc", "redox_syscall", ] @@ -2101,11 +2122,17 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -2119,9 +2146,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.24" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6ea2a48c204030ee31a7d7fc72c93294c92fe87ecb1789881c9543516e1a0d" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] @@ -2137,9 +2164,9 @@ dependencies = [ [[package]] name = "mac_address" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8836fae9d0d4be2c8b4efcdd79e828a2faa058a90d005abf42f91cac5493a08e" +checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" dependencies = [ "nix", "winapi", @@ -2190,9 +2217,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", ] @@ -2205,7 +2232,7 @@ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.48.0", ] @@ -2216,7 +2243,7 @@ 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", ] @@ -2249,9 +2276,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -2266,13 +2293,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cfg-if", - "cfg_aliases 0.1.1", + "cfg_aliases", "libc", "memoffset", ] @@ -2367,23 +2394,23 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -2400,29 +2427,29 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "300.4.1+3.4.0" +version = "300.5.0+3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" +checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", @@ -2494,22 +2521,22 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2558,9 +2585,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plotters" @@ -2598,13 +2625,28 @@ checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix", + "rustix 0.38.44", "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2613,9 +2655,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -2663,19 +2705,19 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.27" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" dependencies = [ "proc-macro2", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -2706,9 +2748,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -2735,13 +2777,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -2775,7 +2823,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -2793,7 +2841,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d16546c5b5962abf8ce6e2881e722b4e0ae3b6f1a08a26ae3573c55853ca68d3" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "cassowary", "compact_str", "crossterm", @@ -2830,11 +2878,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", ] [[package]] @@ -2877,15 +2925,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -2921,9 +2968,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" dependencies = [ "const-oid", "digest", @@ -2941,9 +2988,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.36.0" +version = "1.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50" dependencies = [ "arrayvec", "borsh", @@ -2969,22 +3016,35 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.43" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" dependencies = [ "aws-lc-rs", "once_cell", @@ -3009,15 +3069,15 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "aws-lc-rs", "ring", @@ -3027,15 +3087,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -3073,7 +3133,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -3086,7 +3146,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.0", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -3105,47 +3165,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", -] - -[[package]] -name = "serde_fmt" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" -dependencies = [ - "serde", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -3199,7 +3250,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3293,9 +3344,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" dependencies = [ "serde", ] @@ -3319,9 +3370,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3426,7 +3477,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.2", "hashlink", - "indexmap 2.7.0", + "indexmap 2.9.0", "ipnet", "ipnetwork", "log", @@ -3445,7 +3496,7 @@ dependencies = [ "smallvec", "smol", "sqlx", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tokio", "tokio-stream", @@ -3481,7 +3532,7 @@ dependencies = [ "serde_json", "serde_with", "sqlx", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tokio", "tower", @@ -3589,7 +3640,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3614,7 +3665,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.96", + "syn 2.0.100", "tempfile", "tokio", "url", @@ -3627,7 +3678,7 @@ dependencies = [ "atoi", "base64 0.22.1", "bigdecimal", - "bitflags 2.7.0", + "bitflags 2.9.0", "byteorder", "bytes", "chrono", @@ -3659,7 +3710,7 @@ dependencies = [ "sqlx", "sqlx-core", "stringprep", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -3674,7 +3725,7 @@ dependencies = [ "base64 0.22.1", "bigdecimal", "bit-vec", - "bitflags 2.7.0", + "bitflags 2.9.0", "byteorder", "chrono", "crc", @@ -3705,7 +3756,7 @@ dependencies = [ "sqlx", "sqlx-core", "stringprep", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -3732,7 +3783,7 @@ dependencies = [ "serde_urlencoded", "sqlx", "sqlx-core", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "url", @@ -3756,7 +3807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3807,7 +3858,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3816,84 +3867,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "sval" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" - -[[package]] -name = "sval_buffer" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" -dependencies = [ - "serde", - "sval", - "sval_nested", -] - [[package]] name = "syn" version = "1.0.109" @@ -3907,9 +3880,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -3930,7 +3903,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -3941,21 +3914,20 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-triple" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a4d50cdb458045afc8131fd91b64904da29548bcb63c7236e0844936c13078" +checksum = "1ac9aa371f599d22256307c24a9d748c041e548cbf599f35d890f9d365361790" [[package]] name = "tempfile" -version = "3.15.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.2", "once_cell", - "rustix", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -3985,11 +3957,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -4000,25 +3972,25 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "time" -version = "0.3.37" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -4031,15 +4003,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -4067,9 +4039,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -4082,9 +4054,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -4106,7 +4078,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4122,9 +4094,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -4143,11 +4115,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.9.0", "serde", "serde_spanned", "toml_datetime", @@ -4221,7 +4193,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -4241,9 +4213,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.101" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dcd332a5496c026f1e14b7f3d2b7bd98e509660c04239c58b0ba38a12daded4" +checksum = "6ae08be68c056db96f0e6c6dd820727cca756ced9e1f4cc7fdd20e2a55e23898" dependencies = [ "glob", "serde", @@ -4254,17 +4226,11 @@ dependencies = [ "toml", ] -[[package]] -name = "typeid" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" - [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-bidi" @@ -4274,9 +4240,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" @@ -4359,9 +4325,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ "serde", ] @@ -4410,39 +4376,9 @@ dependencies = [ [[package]] name = "value-bag" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" -dependencies = [ - "erased-serde", - "serde", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "vcpkg" @@ -4458,9 +4394,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -4490,6 +4426,15 @@ 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.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -4498,34 +4443,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -4536,9 +4482,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4546,28 +4492,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -4575,9 +4524,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -4591,14 +4540,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.44", ] [[package]] name = "whoami" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" dependencies = [ "redox_syscall", "wasite", @@ -4637,11 +4586,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", ] [[package]] @@ -4794,13 +4793,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -4842,49 +4850,48 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -4913,5 +4920,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] diff --git a/Cargo.toml b/Cargo.toml index 75a20af97a..0d1e78de45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ authors = [ "Chloe Ross ", "Daniel Akhterov ", ] -rust-version = "1.80.0" +rust-version = "1.81" [package] name = "sqlx" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 16beae9c11..ba33ae0797 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ # Note: should NOT increase during a minor/patch release cycle [toolchain] -channel = "1.80" +channel = "1.81" profile = "minimal" diff --git a/sqlx-macros-core/Cargo.toml b/sqlx-macros-core/Cargo.toml index 9828d31380..1dccbd4c56 100644 --- a/sqlx-macros-core/Cargo.toml +++ b/sqlx-macros-core/Cargo.toml @@ -76,5 +76,4 @@ url = { version = "2.2.2" } [lints.rust.unexpected_cfgs] level = "warn" -# 1.80 will warn without this check-cfg = ['cfg(sqlx_macros_unstable)', 'cfg(procmacro2_semver_exempt)'] From e668eced4d551f4d141d2caab8831ae5112cc340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 14:12:59 +0200 Subject: [PATCH 22/28] Fix of missing _sqlite in cargo.toml --- sqlx-cli/Cargo.toml | 6 ++++-- sqlx-cli/src/database.rs | 2 +- sqlx-cli/src/opt.rs | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sqlx-cli/Cargo.toml b/sqlx-cli/Cargo.toml index 582099a2f6..6604ca824f 100644 --- a/sqlx-cli/Cargo.toml +++ b/sqlx-cli/Cargo.toml @@ -53,10 +53,12 @@ rustls = ["sqlx/runtime-tokio-rustls"] native-tls = ["sqlx/runtime-tokio-native-tls"] # databases +_sqlite = [] + mysql = ["sqlx/mysql"] postgres = ["sqlx/postgres"] -sqlite = ["sqlx/sqlite"] -sqlite-unbundled = ["sqlx/sqlite-unbundled"] +sqlite = ["_sqlite", "sqlx/sqlite"] +sqlite-unbundled = ["_sqlite", "sqlx/sqlite-unbundled"] # workaround for musl + openssl issues openssl-vendored = ["openssl/vendored"] diff --git a/sqlx-cli/src/database.rs b/sqlx-cli/src/database.rs index 7dd87253af..7a9bc6bf2f 100644 --- a/sqlx-cli/src/database.rs +++ b/sqlx-cli/src/database.rs @@ -13,7 +13,7 @@ pub async fn create(connect_opts: &ConnectOpts) -> anyhow::Result<()> { let exists = crate::retry_connect_errors(connect_opts, Any::database_exists).await?; if !exists { - #[cfg(any(feature = "sqlite", feature = "sqlite-unbundled"))] + #[cfg(feature = "_sqlite")] sqlx::sqlite::CREATE_DB_WAL.store( connect_opts.sqlite_create_db_wal, std::sync::atomic::Ordering::Release, diff --git a/sqlx-cli/src/opt.rs b/sqlx-cli/src/opt.rs index 0b771921b9..07058aa147 100644 --- a/sqlx-cli/src/opt.rs +++ b/sqlx-cli/src/opt.rs @@ -262,7 +262,7 @@ pub struct ConnectOpts { /// However, if your application sets a `journal_mode` on `SqliteConnectOptions` to something /// other than `Wal`, then it will have to take the database file out of WAL mode on connecting, /// which requires an exclusive lock and may return a `database is locked` (`SQLITE_BUSY`) error. - #[cfg(any(feature = "sqlite", feature = "sqlite-unbundled"))] + #[cfg(feature = "_sqlite")] #[clap(long, action = clap::ArgAction::Set, default_value = "true")] pub sqlite_create_db_wal: bool, } From 246bfd3d01c24ae6a367215d3b2a70bc5c4fe221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 15:13:53 +0200 Subject: [PATCH 23/28] Clippy lints --- sqlx-macros-core/src/test_attr.rs | 10 +++------- sqlx-sqlite/src/connection/worker.rs | 6 ++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/sqlx-macros-core/src/test_attr.rs b/sqlx-macros-core/src/test_attr.rs index d7c6eb0486..3104a0e743 100644 --- a/sqlx-macros-core/src/test_attr.rs +++ b/sqlx-macros-core/src/test_attr.rs @@ -246,13 +246,9 @@ fn parse_args(attr_args: AttributeArgs) -> syn::Result { fn recurse_lit_lookup(expr: Expr) -> Option { match expr { - Expr::Lit(syn::ExprLit { lit, .. }) => { - return Some(lit); - } - Expr::Group(syn::ExprGroup { expr, .. }) => { - return recurse_lit_lookup(*expr); - } - _ => return None, + Expr::Lit(syn::ExprLit { lit, .. }) => Some(lit), + Expr::Group(syn::ExprGroup { expr, .. }) => recurse_lit_lookup(*expr), + _ => None, } } diff --git a/sqlx-sqlite/src/connection/worker.rs b/sqlx-sqlite/src/connection/worker.rs index 00a4c2999c..be91feaba1 100644 --- a/sqlx-sqlite/src/connection/worker.rs +++ b/sqlx-sqlite/src/connection/worker.rs @@ -145,14 +145,12 @@ impl ConnectionWorker { let _guard = span.enter(); match cmd { Command::Prepare { query, tx } => { - tx.send(prepare(&mut conn, &query).map(|prepared| { + tx.send(prepare(&mut conn, &query).inspect(|_| { update_cached_statements_size( &conn, &shared.cached_statements_size, ); - prepared - })) - .ok(); + })).ok(); } Command::Describe { query, tx } => { tx.send(describe(&mut conn, &query)).ok(); From 9b0cebb426ad797e1682130bb00bda86b094a99b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 15:28:11 +0200 Subject: [PATCH 24/28] Clean up --- Cargo.lock | 2 -- sqlx-core/Cargo.toml | 9 +-------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ef57f13f4..cdf32a911b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3457,8 +3457,6 @@ version = "0.8.3" dependencies = [ "async-global-executor 3.1.0", "async-io", - "async-lock", - "async-net", "async-std", "base64 0.22.1", "bigdecimal", diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index 02bfc56c53..73997dcc7d 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -19,12 +19,7 @@ any = [] json = ["serde", "serde_json"] # for conditional compilation -_rt-async-global-executor = [ - "async-global-executor", - "async-lock", - "async-net", - "_rt-async-io", -] +_rt-async-global-executor = ["async-global-executor", "_rt-async-io"] _rt-async-io = ["async-io"] _rt-async-std = ["async-std", "_rt-async-io"] _rt-smol = ["smol", "_rt-async-io"] @@ -64,8 +59,6 @@ mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } async-io = { version = "2.2", optional = true } -async-lock = { version = "3.4.0", optional = true } -async-net = { package = "async-net", version = "2.0.0", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" cfg-if = { workspace = true } From c3e8f61c2f6196042964cc86634a99d16f93acef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 13 Apr 2025 16:10:07 +0200 Subject: [PATCH 25/28] Remove features combinations --- Cargo.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0d1e78de45..45e3a0c5f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,15 +94,9 @@ tls-none = [] # Legacy Runtime + TLS features -runtime-async-global-executor-native-tls = ["runtime-async-global-executor", "tls-native-tls"] -runtime-async-global-executor-rustls = ["runtime-async-global-executor", "tls-rustls-ring"] - runtime-async-std-native-tls = ["runtime-async-std", "tls-native-tls"] runtime-async-std-rustls = ["runtime-async-std", "tls-rustls-ring"] -runtime-smol-native-tls = ["runtime-smol", "tls-native-tls"] -runtime-smol-rustls = ["runtime-smol", "tls-rustls-ring"] - runtime-tokio-native-tls = ["runtime-tokio", "tls-native-tls"] runtime-tokio-rustls = ["runtime-tokio", "tls-rustls-ring"] From 1fe4472245e845c30736ad06823686ca36e0505c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 6 Jul 2025 19:31:45 +0200 Subject: [PATCH 26/28] Fixes after merge --- Cargo.lock | 1443 +++++++++++++++++++---------------- sqlx-cli/Cargo.toml | 3 - sqlx-macros-core/src/lib.rs | 16 +- 3 files changed, 810 insertions(+), 652 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 321eaadf0c..537997613d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 4 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "ahash" @@ -23,7 +23,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.16", "once_cell", "version_check", ] @@ -66,9 +66,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -81,43 +81,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", + "once_cell_polyfill", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "argon2" @@ -150,9 +151,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "assert_cmd" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" +checksum = "2bd389a4b2970a01282ee455294913c0a43724daedcd1a24c3eb0ec1c1320b66" dependencies = [ "anstyle", "bstr", @@ -187,9 +188,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -199,24 +200,36 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", + "pin-project-lite", "slab", ] +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + [[package]] name = "async-global-executor" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-executor", "async-io", "async-lock", @@ -225,6 +238,20 @@ dependencies = [ "once_cell", ] +[[package]] +name = "async-global-executor" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" version = "2.4.1" @@ -255,15 +282,63 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +dependencies = [ + "async-channel 2.5.0", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite", + "rustix 1.0.7", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.0.7", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + [[package]] name = "async-std" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ "async-attributes", "async-channel 1.9.0", - "async-global-executor", + "async-global-executor 2.4.1", "async-io", "async-lock", "crossbeam-utils", @@ -290,13 +365,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -316,33 +391,31 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f409eb70b561706bf8abba8ca9c112729c481595893fd06a2dd9af8ed8441148" +checksum = "93fcc8f365936c834db5514fc45aee5b1202d677e6b40e48468aaaa8183ca8c7" dependencies = [ "aws-lc-sys", - "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.24.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923ded50f602b3007e5e63e3f094c479d9c8a9b42d7f4034e4afe456aa48bfd2" +checksum = "61b1d86e7705efe1be1b569bab41d4fa1e14e220b60a160f78de2db687add079" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "paste", ] [[package]] @@ -412,7 +485,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom", + "getrandom 0.2.16", "instant", "pin-project-lite", "rand", @@ -421,17 +494,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -448,15 +521,15 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bigdecimal" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" +checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" dependencies = [ "autocfg", "libm", @@ -471,7 +544,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "cexpr", "clang-sys", "itertools 0.12.1", @@ -484,7 +557,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.96", + "syn 2.0.104", "which", ] @@ -502,9 +575,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.7.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" dependencies = [ "serde", ] @@ -541,11 +614,11 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", "futures-lite", @@ -554,32 +627,32 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ "borsh-derive", - "cfg_aliases 0.2.1", + "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "1.5.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "regex-automata", @@ -588,9 +661,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytecheck" @@ -622,15 +695,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "camino" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" dependencies = [ "serde", ] @@ -681,9 +754,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.8" +version = "1.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0cf6e91fde44c773c6ee7ec6bba798504641a8bc2eb7e37a04ffbf4dfaa55a" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" dependencies = [ "jobserver", "libc", @@ -701,15 +774,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -719,9 +786,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -729,7 +796,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -772,9 +839,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.26" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" dependencies = [ "clap_builder", "clap_derive", @@ -782,9 +849,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.26" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" dependencies = [ "anstream", "anstyle", @@ -795,45 +862,45 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.42" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a7e468e750fa4b6be660e8b5651ad47372e8fb114030b594c2d75d48c5ffd0" +checksum = "aad5b1b4de04fead402672b48897030eec1f3bfe1550776322f59f6d6e6a5677" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "cmake" -version = "0.1.52" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] [[package]] name = "color-eyre" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" dependencies = [ "backtrace", "color-spantrace", @@ -846,9 +913,9 @@ dependencies = [ [[package]] name = "color-spantrace" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" dependencies = [ "once_cell", "owo-colors", @@ -858,9 +925,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "compact_str" @@ -886,14 +953,14 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", "once_cell", - "unicode-width 0.2.0", + "unicode-width 0.2.1", "windows-sys 0.59.0", ] @@ -915,9 +982,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -931,18 +998,18 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -1031,7 +1098,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "crossterm_winapi", "libc", "mio 0.8.11", @@ -1052,9 +1119,9 @@ dependencies = [ [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" @@ -1068,9 +1135,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -1078,34 +1145,34 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "pem-rfc7468", @@ -1114,9 +1181,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", "serde", @@ -1159,7 +1226,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -1188,9 +1255,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" dependencies = [ "serde", ] @@ -1213,41 +1280,31 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] [[package]] name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.5" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" -dependencies = [ - "serde", - "typeid", -] +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1280,9 +1337,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener 5.4.0", "pin-project-lite", @@ -1344,9 +1401,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" @@ -1374,9 +1431,9 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "fs_extra" @@ -1450,9 +1507,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -1469,7 +1526,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -1513,20 +1570,32 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1548,9 +1617,9 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", @@ -1567,9 +1636,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", "equivalent", @@ -1582,7 +1651,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.4", ] [[package]] @@ -1599,9 +1668,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -1629,11 +1698,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1666,9 +1735,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1676,12 +1745,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.32" @@ -1707,14 +1770,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1730,21 +1794,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1753,31 +1818,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1785,67 +1830,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -1875,9 +1907,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1908,12 +1940,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.4", ] [[package]] @@ -1925,11 +1957,22 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "ipnetwork" @@ -1942,13 +1985,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1986,24 +2029,49 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -2035,33 +2103,33 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.53.2", ] [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "libc", "redox_syscall", ] @@ -2092,15 +2160,15 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -2108,9 +2176,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.24" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6ea2a48c204030ee31a7d7fc72c93294c92fe87ecb1789881c9543516e1a0d" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] @@ -2121,14 +2189,14 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.4", ] [[package]] name = "mac_address" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8836fae9d0d4be2c8b4efcdd79e828a2faa058a90d005abf42f91cac5493a08e" +checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" dependencies = [ "nix", "winapi", @@ -2152,9 +2220,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memoffset" @@ -2179,11 +2247,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -2194,19 +2262,19 @@ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.48.0", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] @@ -2238,9 +2306,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -2255,13 +2323,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "cfg-if", - "cfg_aliases 0.1.1", + "cfg_aliases", "libc", "memoffset", ] @@ -2357,32 +2425,38 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "cfg-if", "foreign-types", "libc", @@ -2399,29 +2473,29 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "300.4.1+3.4.0" +version = "300.5.1+3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" +checksum = "735230c832b28c000e3bc117119e6466a663ec73506bc0a9907ea4187508e42a" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -2438,9 +2512,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owo-colors" -version = "3.5.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" +checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" [[package]] name = "parking" @@ -2450,9 +2524,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -2460,9 +2534,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -2516,22 +2590,22 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -2580,9 +2654,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plotters" @@ -2614,19 +2688,43 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.4" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 0.38.43", + "rustix 1.0.7", "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2635,9 +2733,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -2685,19 +2783,19 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.27" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" +checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" dependencies = [ "proc-macro2", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -2728,9 +2826,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -2757,13 +2855,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 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" @@ -2797,7 +2901,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", ] [[package]] @@ -2815,7 +2919,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d16546c5b5962abf8ce6e2881e722b4e0ae3b6f1a08a26ae3573c55853ca68d3" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "cassowary", "compact_str", "crossterm", @@ -2852,11 +2956,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", ] [[package]] @@ -2899,15 +3003,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -2943,9 +3046,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" dependencies = [ "const-oid", "digest", @@ -2963,9 +3066,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.36.0" +version = "1.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +checksum = "b203a6425500a03e0919c42d3c47caca51e79f1132046626d2c8871c5092035d" dependencies = [ "arrayvec", "borsh", @@ -2979,9 +3082,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -2991,11 +3094,11 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.43" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3008,7 +3111,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", @@ -3017,9 +3120,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "aws-lc-rs", "once_cell", @@ -3065,15 +3168,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -3111,7 +3214,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.9.1", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -3124,8 +3227,8 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.7.0", - "core-foundation 0.10.0", + "bitflags 2.9.1", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -3143,47 +3246,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", -] - -[[package]] -name = "serde_fmt" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" -dependencies = [ - "serde", + "syn 2.0.104", ] [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -3193,9 +3287,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -3237,7 +3331,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -3253,9 +3347,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -3285,9 +3379,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ "libc", "signal-hook-registry", @@ -3306,9 +3400,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -3331,27 +3425,41 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ "serde", ] +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", +] + [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3434,6 +3542,7 @@ dependencies = [ name = "sqlx-core" version = "0.9.0-alpha.1" dependencies = [ + "async-global-executor 3.1.0", "async-io", "async-std", "base64 0.22.1", @@ -3441,6 +3550,7 @@ dependencies = [ "bit-vec", "bstr", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -3450,9 +3560,9 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.2", + "hashbrown 0.15.4", "hashlink", - "indexmap 2.7.0", + "indexmap 2.10.0", "ipnet", "ipnetwork", "log", @@ -3468,8 +3578,9 @@ dependencies = [ "serde_json", "sha2", "smallvec", + "smol", "sqlx", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tokio", "tokio-stream", @@ -3477,7 +3588,7 @@ dependencies = [ "tracing", "url", "uuid", - "webpki-roots", + "webpki-roots 0.26.11", ] [[package]] @@ -3504,7 +3615,7 @@ dependencies = [ "serde_json", "serde_with", "sqlx", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tokio", "tower", @@ -3723,14 +3834,16 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "sqlx-macros-core" version = "0.9.0-alpha.1" dependencies = [ + "async-global-executor 3.1.0", "async-std", + "cfg-if", "dotenvy", "either", "heck 0.5.0", @@ -3740,11 +3853,12 @@ dependencies = [ "serde", "serde_json", "sha2", + "smol", "sqlx-core", "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.96", + "syn 2.0.104", "tokio", "url", ] @@ -3756,7 +3870,7 @@ dependencies = [ "atoi", "base64 0.22.1", "bigdecimal", - "bitflags 2.7.0", + "bitflags 2.9.1", "byteorder", "bytes", "chrono", @@ -3787,7 +3901,7 @@ dependencies = [ "sqlx", "sqlx-core", "stringprep", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -3802,7 +3916,7 @@ dependencies = [ "base64 0.22.1", "bigdecimal", "bit-vec", - "bitflags 2.7.0", + "bitflags 2.9.1", "byteorder", "chrono", "crc", @@ -3832,7 +3946,7 @@ dependencies = [ "sqlx", "sqlx-core", "stringprep", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -3859,7 +3973,7 @@ dependencies = [ "serde_urlencoded", "sqlx", "sqlx-core", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "tracing", "url", @@ -3883,7 +3997,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -3934,7 +4048,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -3943,84 +4057,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "sval" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" - -[[package]] -name = "sval_buffer" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" -dependencies = [ - "serde", - "sval", - "sval_nested", -] - [[package]] name = "syn" version = "1.0.109" @@ -4034,9 +4070,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -4051,13 +4087,13 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -4068,21 +4104,20 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-triple" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a4d50cdb458045afc8131fd91b64904da29548bcb63c7236e0844936c13078" +checksum = "1ac9aa371f599d22256307c24a9d748c041e548cbf599f35d890f9d365361790" [[package]] name = "tempfile" -version = "3.15.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.3", "once_cell", - "rustix 0.38.43", + "rustix 1.0.7", "windows-sys 0.59.0", ] @@ -4122,11 +4157,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -4137,35 +4172,34 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] name = "time" -version = "0.3.37" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -4178,15 +4212,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -4194,9 +4228,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -4214,9 +4248,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -4229,17 +4263,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", - "mio 1.0.3", + "mio 1.0.4", "parking_lot", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "windows-sys 0.52.0", @@ -4253,7 +4289,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -4269,9 +4305,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", @@ -4281,26 +4317,33 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", + "toml_write", "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "tower" version = "0.4.13" @@ -4362,20 +4405,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -4424,9 +4467,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.101" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dcd332a5496c026f1e14b7f3d2b7bd98e509660c04239c58b0ba38a12daded4" +checksum = "1c9bf9513a2f4aeef5fdac8677d7d349c79fdbcc03b9c86da6e9d254f1e43be2" dependencies = [ "glob", "serde", @@ -4437,17 +4480,11 @@ dependencies = [ "toml", ] -[[package]] -name = "typeid" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" - [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-bidi" @@ -4457,9 +4494,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" @@ -4501,9 +4538,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "untrusted" @@ -4522,12 +4559,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -4542,11 +4573,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.15.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ + "js-sys", "serde", + "wasm-bindgen", ] [[package]] @@ -4599,39 +4632,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" -dependencies = [ - "erased-serde", - "serde", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "vcpkg" @@ -4647,9 +4650,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -4675,9 +4678,18 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] [[package]] name = "wasite" @@ -4687,34 +4699,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -4725,9 +4738,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4735,28 +4748,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -4764,9 +4780,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.1", +] + +[[package]] +name = "webpki-roots" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" dependencies = [ "rustls-pki-types", ] @@ -4780,14 +4805,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.43", + "rustix 0.38.44", ] [[package]] name = "whoami" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" dependencies = [ "redox_syscall", "wasite", @@ -4826,11 +4851,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", ] [[package]] @@ -4860,6 +4935,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -4884,13 +4968,29 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4903,6 +5003,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -4915,6 +5021,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -4927,12 +5039,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -4945,6 +5069,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -4957,6 +5087,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -4969,6 +5105,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -4981,26 +5123,35 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] [[package]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -5013,9 +5164,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -5025,55 +5176,54 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "synstructure", ] @@ -5083,11 +5233,22 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -5096,11 +5257,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] diff --git a/sqlx-cli/Cargo.toml b/sqlx-cli/Cargo.toml index ef6236cce9..9891e80ee0 100644 --- a/sqlx-cli/Cargo.toml +++ b/sqlx-cli/Cargo.toml @@ -58,9 +58,6 @@ default = ["postgres", "sqlite", "mysql", "native-tls", "completions", "sqlx-tom rustls = ["sqlx/tls-rustls"] native-tls = ["sqlx/tls-native-tls"] -# databases -_sqlite = [] - mysql = ["sqlx/mysql"] postgres = ["sqlx/postgres"] sqlite = ["sqlx/sqlite", "_sqlite"] diff --git a/sqlx-macros-core/src/lib.rs b/sqlx-macros-core/src/lib.rs index 8183d8a1f0..9d4204f814 100644 --- a/sqlx-macros-core/src/lib.rs +++ b/sqlx-macros-core/src/lib.rs @@ -69,14 +69,14 @@ where use tokio::runtime::{self, Runtime}; - // We need a single, persistent Tokio runtime since we're caching connections, - // otherwise we'll get "IO driver has terminated" errors. - static TOKIO_RT: Lazy = Lazy::new(|| { - runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to start Tokio runtime") - }); + // We need a single, persistent Tokio runtime since we're caching connections, + // otherwise we'll get "IO driver has terminated" errors. + static TOKIO_RT: LazyLock = LazyLock::new(|| { + runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to start Tokio runtime") + }); TOKIO_RT.block_on(f) } else { From 2d1d910df6047260550a0dab7e195ec7ccfc1e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Sun, 6 Jul 2025 20:06:59 +0200 Subject: [PATCH 27/28] Fix of compiling connect_tcp_address with both tokio + other executor selected --- sqlx-core/src/net/socket/mod.rs | 50 +++++++++++++++++++++++++-------- sqlx-core/src/rt/mod.rs | 2 +- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index 654ddf6d66..4760c359af 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -234,18 +234,19 @@ pub async fn connect_tcp( } async fn connect_tcp_address(socket_addr: SocketAddr) -> crate::Result { - #[cfg(feature = "_rt-tokio")] - if crate::rt::rt_tokio::available() { - use tokio::net::TcpStream; - - let stream = TcpStream::connect(socket_addr).await?; - stream.set_nodelay(true)?; + cfg_if! { + if #[cfg(feature = "_rt-tokio")] { + if crate::rt::rt_tokio::available() { + use tokio::net::TcpStream; - return Ok(stream); - } + let stream = TcpStream::connect(socket_addr).await?; + stream.set_nodelay(true)?; - cfg_if! { - if #[cfg(feature = "_rt-async-io")] { + Ok(stream) + } else { + crate::rt::missing_rt(socket_addr) + } + } else if #[cfg(feature = "_rt-async-io")] { use async_io::Async; use std::net::TcpStream; @@ -254,11 +255,38 @@ async fn connect_tcp_address(socket_addr: SocketAddr) -> crate::Result io::Result { + unreachable!() + } + + fn try_write(&mut self, _: &[u8]) -> io::Result { + unreachable!() + } + + fn poll_read_ready(&mut self, _: &mut Context<'_>) -> Poll> { + unreachable!() + } + + fn poll_write_ready(&mut self, _: &mut Context<'_>) -> Poll> { + unreachable!() + } + + fn poll_shutdown(&mut self, _: &mut Context<'_>) -> Poll> { + unreachable!() + } +} + /// Connect a Unix Domain Socket at the given path. /// /// Returns an error if Unix Domain Sockets are not supported on this platform. diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index c7f3de0a40..34bc2883f4 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -163,7 +163,7 @@ pub fn test_block_on(f: F) -> F::Output { } #[track_caller] -pub fn missing_rt(_unused: T) -> ! { +pub const fn missing_rt(_unused: T) -> ! { if cfg!(feature = "_rt-tokio") { panic!("this functionality requires a Tokio context") } From 3b95c991af6bdc80ec06f29ab514feaf5c05b397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kola=C5=99=C3=ADk?= Date: Mon, 7 Jul 2025 20:04:50 +0200 Subject: [PATCH 28/28] Try to fix CI -Z minimal-versions check Try to fix CI -Z minimal-versions check --- Cargo.lock | 1 + sqlx-core/Cargo.toml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 537997613d..d6f6f543f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3542,6 +3542,7 @@ dependencies = [ name = "sqlx-core" version = "0.9.0-alpha.1" dependencies = [ + "async-fs", "async-global-executor 3.1.0", "async-io", "async-std", diff --git a/sqlx-core/Cargo.toml b/sqlx-core/Cargo.toml index ad49ca753f..27a8563998 100644 --- a/sqlx-core/Cargo.toml +++ b/sqlx-core/Cargo.toml @@ -21,7 +21,7 @@ json = ["serde", "serde_json"] # for conditional compilation _rt-async-global-executor = ["async-global-executor", "_rt-async-io"] -_rt-async-io = ["async-io"] +_rt-async-io = ["async-io", "async-fs"] # see note at async-fs declaration _rt-async-std = ["async-std", "_rt-async-io"] _rt-smol = ["smol", "_rt-async-io"] _rt-tokio = ["tokio", "tokio-stream"] @@ -68,6 +68,8 @@ mac_address = { workspace = true, optional = true } uuid = { workspace = true, optional = true } async-io = { version = "2.4.1", optional = true } +# work around bug in async-fs 2.0.0, which references futures-lite dependency wrongly, see https://github.com/launchbadge/sqlx/pull/3791#issuecomment-3043363281 +async-fs = { version = "2.1", optional = true } base64 = { version = "0.22.0", default-features = false, features = ["std"] } bytes = "1.1.0" cfg-if = { workspace = true }