postgres_rustls

Rustls-based library for postgres.
git clone https://git.philomathiclife.com/repos/postgres_rustls
Log | Files | Refs | README

commit cd1edf3b32eede0492cda04ba9ecf545460a7f21
parent db0437e839f6486c57f82face9a36f72c3d4492f
Author: Zack Newman <zack@philomathiclife.com>
Date:   Mon, 23 Jun 2025 11:21:36 -0600

more lints

Diffstat:
MCargo.toml | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Msrc/lib.rs | 50++++++++++++++++----------------------------------
2 files changed, 81 insertions(+), 38 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml @@ -10,20 +10,81 @@ name = "postgres_rustls" readme = "README.md" repository = "https://git.philomathiclife.com/repos/postgres_rustls/" rust-version = "1.86.0" -version = "0.1.2" +version = "0.1.3" + +[lints.rust] +ambiguous_negative_literals = { level = "deny", priority = -1 } +closure_returning_async_block = { level = "deny", priority = -1 } +deref_into_dyn_supertrait = { level = "deny", priority = -1 } +ffi_unwind_calls = { level = "deny", priority = -1 } +future_incompatible = { level = "deny", priority = -1 } +impl_trait_redundant_captures = { level = "deny", priority = -1 } +keyword-idents = { level = "deny", priority = -1 } +let_underscore = { level = "deny", priority = -1 } +linker_messages = { level = "deny", priority = -1 } +macro_use_extern_crate = { level = "deny", priority = -1 } +meta_variable_misuse = { level = "deny", priority = -1 } +missing_copy_implementations = { level = "deny", priority = -1 } +missing_debug_implementations = { level = "deny", priority = -1 } +missing_docs = { level = "deny", priority = -1 } +non_ascii_idents = { level = "deny", priority = -1 } +nonstandard_style = { level = "deny", priority = -1 } +redundant_imports = { level = "deny", priority = -1 } +redundant_lifetimes = { level = "deny", priority = -1 } +refining_impl_trait = { level = "deny", priority = -1 } +rust_2018_compatibility = { level = "deny", priority = -1 } +rust_2018_idioms = { level = "deny", priority = -1 } +rust_2021_compatibility = { level = "deny", priority = -1 } +rust_2024_compatibility = { level = "deny", priority = -1 } +single_use_lifetimes = { level = "deny", priority = -1 } +trivial_casts = { level = "deny", priority = -1 } +trivial_numeric_casts = { level = "deny", priority = -1 } +unit_bindings = { level = "deny", priority = -1 } +unknown_lints = { level = "deny", priority = -1 } +unnameable_types = { level = "deny", priority = -1 } +unreachable_pub = { level = "deny", priority = -1 } +unsafe_code = { level = "deny", priority = -1 } +unstable_features = { level = "deny", priority = -1 } +unused = { level = "deny", priority = -1 } +unused_crate_dependencies = { level = "deny", priority = -1 } +unused_import_braces = { level = "deny", priority = -1 } +unused_lifetimes = { level = "deny", priority = -1 } +unused_qualifications = { level = "deny", priority = -1 } +unused_results = { level = "deny", priority = -1 } +variant_size_differences = { level = "deny", priority = -1 } +warnings = { level = "deny", priority = -1 } + +[lints.clippy] +all = { level = "deny", priority = -1 } +cargo = { level = "deny", priority = -1 } +complexity = { level = "deny", priority = -1 } +correctness = { level = "deny", priority = -1 } +nursery = { level = "deny", priority = -1 } +pedantic = { level = "deny", priority = -1 } +perf = { level = "deny", priority = -1 } +restriction = { level = "deny", priority = -1 } +style = { level = "deny", priority = -1 } +suspicious = { level = "deny", priority = -1 } +# Noisy, opinionated, and likely don't prevent bugs or improve APIs. +arbitrary_source_item_ordering = "allow" +blanket_clippy_restriction_lints = "allow" +implicit_return = "allow" +missing_trait_methods = "allow" +return_and_then = "allow" +single_call_fn = "allow" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [dependencies] -sha2 = { version = "0.10.8", default-features = false } -tokio = { version = "1.44.1", default-features = false } +sha2 = { version = "0.10.9", default-features = false } +tokio = { version = "1.45.1", default-features = false } tokio-postgres = { version = "0.7.13", default-features = false } tokio-rustls = { version = "0.26.2", default-features = false } [dev-dependencies] -tokio = { version = "1.44.1", default-features = false, features = ["rt"] } +tokio = { version = "1.45.1", default-features = false, features = ["rt"] } tokio-rustls = { version = "0.26.2", default-features = false, features = ["ring"] } diff --git a/src/lib.rs b/src/lib.rs @@ -6,43 +6,11 @@ //! //! `postgres_rustls` is a library that adds TLS support to [`tokio_postgres`] using [`tokio_rustls`]. #![cfg_attr(docsrs, feature(doc_cfg))] -#![deny( - unknown_lints, - future_incompatible, - let_underscore, - missing_docs, - nonstandard_style, - refining_impl_trait, - rust_2018_compatibility, - rust_2018_idioms, - rust_2021_compatibility, - rust_2024_compatibility, - unsafe_code, - unused, - warnings, - clippy::all, - clippy::cargo, - clippy::complexity, - clippy::correctness, - clippy::nursery, - clippy::pedantic, - clippy::perf, - clippy::restriction, - clippy::style, - clippy::suspicious -)] #![expect( - clippy::arbitrary_source_item_ordering, - clippy::blanket_clippy_restriction_lints, - clippy::implicit_return, - clippy::missing_trait_methods, clippy::multiple_crate_versions, - clippy::return_and_then, - clippy::single_call_fn, - reason = "noisy, opinionated, and likely doesn't prevent bugs or improve APIs" + reason = "dependencies haven't updated to newest crates" )] use core::{ - future::Future, pin::Pin, task::{Context, Poll}, }; @@ -56,7 +24,7 @@ use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio_postgres::tls::MakeTlsConnect; use tokio_postgres::tls::{ChannelBinding, TlsConnect as PgTlsConnect, TlsStream as PgTlsStream}; use tokio_rustls::{ - self, Connect, + Connect, client::TlsStream as RustlsStream, rustls::{ ClientConfig, @@ -362,6 +330,7 @@ impl Hash { } } /// The [`TlsConnector::Stream`] returned from [`TlsConnectorFuture::poll`]. +#[derive(Debug)] pub struct TlsStream<S>(RustlsStream<S>); impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for TlsStream<S> { #[inline] @@ -453,6 +422,10 @@ impl<S: AsyncRead + AsyncWrite + Unpin> PgTlsStream for TlsStream<S> { } } /// [`TlsConnector::Future`] returned from [`TlsConnector::connect`]. +#[expect( + missing_debug_implementations, + reason = "Connect does not implement Debug, so we don't" +)] pub struct TlsConnectorFuture<S>(Connect<S>); impl<S: AsyncRead + AsyncWrite + Unpin> Future for TlsConnectorFuture<S> { type Output = io::Result<TlsStream<S>>; @@ -462,6 +435,10 @@ impl<S: AsyncRead + AsyncWrite + Unpin> Future for TlsConnectorFuture<S> { } } /// Connects to the PostgreSQL server. +#[expect( + missing_debug_implementations, + reason = "TlsConnector does not implement Debug, so we don't" +)] #[expect(clippy::doc_markdown, reason = "PostgreSQL is correct")] pub struct TlsConnector<'domain> { /// Used to connect to the PostgreSQL server. @@ -477,6 +454,7 @@ impl<'domain> TlsConnector<'domain> { /// # Errors /// /// Errors iff [`ServerName::try_from`] does when passed `domain`. + #[expect(single_use_lifetimes, reason = "false positive")] #[inline] pub fn new<'dom: 'domain>( connector: tokio_rustls::TlsConnector, @@ -495,6 +473,10 @@ impl<S: AsyncRead + AsyncWrite + Unpin> PgTlsConnect<S> for TlsConnector<'static } } /// [`MakeTlsConnect`] based on [`tokio_rustls::TlsConnector`]. +#[expect( + missing_debug_implementations, + reason = "TlsConnector does not implement Debug, so we don't" +)] #[cfg_attr(docsrs, doc(cfg(feature = "runtime")))] #[cfg(feature = "runtime")] #[derive(Clone)]