From 7cc11be43b6199b1f8f4ab62764da99d74c530ca Mon Sep 17 00:00:00 2001 From: Leynos Date: Sun, 10 Aug 2025 11:12:27 +0100 Subject: [PATCH 1/3] Clarify preamble handlers and server errors --- src/server/config/binding.rs | 5 ++--- src/server/config/preamble.rs | 1 + src/server/connection.rs | 2 +- src/server/error.rs | 1 + src/server/mod.rs | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/server/config/binding.rs b/src/server/config/binding.rs index fdadc041..75334ada 100644 --- a/src/server/config/binding.rs +++ b/src/server/config/binding.rs @@ -1,6 +1,5 @@ //! Binding configuration for [`WireframeServer`]. -use core::marker::PhantomData; use std::{ net::{SocketAddr, TcpListener as StdTcpListener}, sync::Arc, @@ -92,7 +91,7 @@ where state: Bound { listener: Arc::new(tokio), }, - _preamble: PhantomData, + _preamble: self._preamble, }) } } @@ -177,7 +176,7 @@ where state: Bound { listener: Arc::new(tokio), }, - _preamble: PhantomData, + _preamble: self._preamble, }) } } diff --git a/src/server/config/preamble.rs b/src/server/config/preamble.rs index 308b8f1c..449961f2 100644 --- a/src/server/config/preamble.rs +++ b/src/server/config/preamble.rs @@ -55,6 +55,7 @@ where /// Register a handler invoked when the connection preamble decodes successfully. /// /// The handler must implement [`crate::server::PreambleSuccessHandler`]. + /// See [`crate::server::PreambleHandler`] for a ready-to-use alias. /// /// # Examples /// diff --git a/src/server/connection.rs b/src/server/connection.rs index dae0c8d0..11cfa969 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -64,7 +64,7 @@ async fn process_stream( if let Some(handler) = on_success.as_ref() && let Err(e) = handler(&preamble, &mut stream).await { - tracing::error!(error = ?e, ?peer_addr, "preamble handler error"); + tracing::error!(error = %e, ?peer_addr, "preamble handler error"); } let stream = RewindStream::new(leftover, stream); let app = (factory)(); diff --git a/src/server/error.rs b/src/server/error.rs index 1da12fae..0ba68d3d 100644 --- a/src/server/error.rs +++ b/src/server/error.rs @@ -5,6 +5,7 @@ use std::io; use thiserror::Error; /// Errors that may occur while configuring or running the server. +#[non_exhaustive] #[derive(Debug, Error)] pub enum ServerError { /// Binding or configuring the listener failed. diff --git a/src/server/mod.rs b/src/server/mod.rs index 1177e77d..5c97cac1 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -56,7 +56,7 @@ impl PreambleSuccessHandler for F where { } -/// Handler invoked when a connection preamble decodes successfully. +/// [`PreambleSuccessHandler`] wrapped in `Arc`. pub type PreambleHandler = Arc>; /// Handler invoked when decoding a connection preamble fails. From 1b1a36feb316689ad1da2f3385f09708fb751ded Mon Sep 17 00:00:00 2001 From: Leynos Date: Sun, 10 Aug 2025 12:37:21 +0100 Subject: [PATCH 2/3] Record non-exhaustive ServerError --- CHANGELOG.md | 2 ++ src/server/connection.rs | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0545544d..f4255816 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,3 +6,5 @@ All notable changes to this project will be documented in this file. - Deprecated `SharedState::new` (since 0.2.0); construct via `inner.into()` instead. +- Marked `ServerError` as `#[non_exhaustive]`. Downstream consumers must add a + wildcard arm when matching on it. diff --git a/src/server/connection.rs b/src/server/connection.rs index 11cfa969..4807fb3d 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -64,7 +64,12 @@ async fn process_stream( if let Some(handler) = on_success.as_ref() && let Err(e) = handler(&preamble, &mut stream).await { - tracing::error!(error = %e, ?peer_addr, "preamble handler error"); + tracing::error!( + error_display = %e, + error_debug = ?e, + ?peer_addr, + "preamble handler error", + ); } let stream = RewindStream::new(leftover, stream); let app = (factory)(); From 8c21bf1450e042b3edcbca82b692cfe281bb3be0 Mon Sep 17 00:00:00 2001 From: Leynos Date: Wed, 13 Aug 2025 18:40:59 +0100 Subject: [PATCH 3/3] Clarify ServerError changelog and log fields --- CHANGELOG.md | 4 ++-- src/server/connection.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4255816..06b81ea5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,5 +6,5 @@ All notable changes to this project will be documented in this file. - Deprecated `SharedState::new` (since 0.2.0); construct via `inner.into()` instead. -- Marked `ServerError` as `#[non_exhaustive]`. Downstream consumers must add a - wildcard arm when matching on it. +- Breaking: Marked `ServerError` as `#[non_exhaustive]`. Downstream consumers + must add a wildcard arm when matching it. diff --git a/src/server/connection.rs b/src/server/connection.rs index 4807fb3d..fff07a62 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -65,7 +65,7 @@ async fn process_stream( && let Err(e) = handler(&preamble, &mut stream).await { tracing::error!( - error_display = %e, + error = %e, error_debug = ?e, ?peer_addr, "preamble handler error",