diff --git a/README.md b/README.md index 3730e278..e1b941b7 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ reduce this boilerplate through layered abstractions: - **Transport adapter** built on Tokio I/O - **Framing layer** for length‑prefixed or custom frames - **Connection preamble** with customizable validation callbacks [[docs](docs/preamble-validator.md)] +- Call `with_preamble::()` before registering success or failure callbacks - **Serialization engine** using `bincode` or a `wire-rs` wrapper - **Routing engine** that dispatches messages by ID - **Handler invocation** with extractor support diff --git a/docs/preamble-validator.md b/docs/preamble-validator.md index f0905fd2..f6561504 100644 --- a/docs/preamble-validator.md +++ b/docs/preamble-validator.md @@ -31,3 +31,12 @@ sequenceDiagram In the tests, a `HotlinePreamble` struct illustrates the pattern, but any preamble type may be used. Register callbacks via `on_preamble_decode_success` and `on_preamble_decode_failure` on `WireframeServer`. + +## Call Order + +`WireframeServer::with_preamble::()` must be called **before** +registering callbacks with `on_preamble_decode_success` or +`on_preamble_decode_failure`. The method converts the server to use a +custom preamble type, dropping any callbacks configured on the default +`()` preamble. Registering callbacks after calling `with_preamble::()` +ensures they are retained. diff --git a/src/server.rs b/src/server.rs index 98c195f8..a8c61b13 100644 --- a/src/server.rs +++ b/src/server.rs @@ -86,10 +86,23 @@ where } } - /// Convert this server to parse a custom preamble `T`. + /// Converts the server to use a custom preamble type for incoming connections. /// - /// Call this before registering preamble handlers, otherwise any - /// previously configured callbacks will be dropped. + /// Calling this method will drop any previously configured preamble decode callbacks. Use it before registering preamble handlers if you wish to retain them. + /// + /// # Type Parameters + /// + /// * `T` – The type to decode as the connection preamble; must implement `bincode::Decode<()>`, `Send`, and `'static`. + /// + /// # Returns + /// + /// A new `WireframeServer` instance configured to decode preambles of type `T`. + /// + /// # Examples + /// + /// ``` + /// let server = WireframeServer::new(factory).with_preamble::(); + /// ``` #[must_use] pub fn with_preamble(self) -> WireframeServer where