Skip to content

refactor(core): move AckStream, DropStream, ResponseHandlers and ChanStream into core behind remote-adapter feature#758

Open
LiamCarPer wants to merge 7 commits into
Totodore:mainfrom
LiamCarPer:refactor/move-stream-handlers-to-core
Open

refactor(core): move AckStream, DropStream, ResponseHandlers and ChanStream into core behind remote-adapter feature#758
LiamCarPer wants to merge 7 commits into
Totodore:mainfrom
LiamCarPer:refactor/move-stream-handlers-to-core

Conversation

@LiamCarPer

Copy link
Copy Markdown
Contributor

Motivation

All three remote adapters (redis, postgres, mongodb) independently define AckStream, DropStream, and ResponseHandlers with near-identical code. This duplication makes maintenance harder and is contrary to the goal of #727 (share more code between adapters).

Solution

Move AckStream<S, R, T, E>, DropStream<S, T>, ResponseHandlers, and ChanStream into socketioxide-core behind the existing remote-adapter feature flag. Each adapter now provides a stateless decode function passed as a fn pointer to AckStream::new(), avoiding orphan rule issues that a trait-based approach would cause when implementing on foreign types like Vec.

…Stream into core behind remote-adapter feature

Moves the duplicated stream constructs from all three remote adapters
(redis, postgres, mongodb) into socketioxide-core behind the existing
remote-adapter feature flag. Removes 737 lines of duplicated code.

- DropStream<S, T>: generic cleanup-on-drop stream wrapper
- AckStream<S, R, T, E>: generic ack stream merging local + remote
- ResponseHandlers<T>: generic type alias for HashMap<Sid, mpsc::Sender<T>>
- ChanStream<T>: generic mpsc::Receiver stream wrapper

Each adapter now provides a decode function passed as a fn pointer
to AckStream, avoiding orphan rule issues with trait impls on foreign
types like Vec<u8>.

Closes Totodore#756
@codspeed-hq

codspeed-hq Bot commented Jul 11, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 87 untouched benchmarks


Comparing LiamCarPer:refactor/move-stream-handlers-to-core (faa54f1) with main (8ffc141)

Open in CodSpeed

Comment thread crates/socketioxide-core/src/adapter/mod.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/stream.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/stream.rs Fixed
@Totodore Totodore added A-core Area related to socketioxide-core C-Refactoring Implies a refactoring labels Jul 11, 2026
@LiamCarPer

Copy link
Copy Markdown
Contributor Author

@Totodore this is ready for review. The 3 clippy code-scanning comments are now fixed (module docs + AckDecoder type alias). The cargo test --all-features --workspace CI failure appears pre-existing on main, looks related to fred/redis-cluster optional feature doctests.

@Totodore

Copy link
Copy Markdown
Owner

CI is green on main, https://github.com/Totodore/socketioxide/actions/runs/29045217076. So there is no reason for it to be red here. Formatting is not even ok.
Please fix all of the issues reported by the CI before.

Comment thread crates/socketioxide-postgres/src/lib.rs Fixed
Comment thread crates/socketioxide-postgres/src/lib.rs Fixed
Comment thread crates/socketioxide-redis/src/lib.rs Fixed
@LiamCarPer

Copy link
Copy Markdown
Contributor Author

engine_io (V3) seems to be a flaky e2e test, this changes dont touch anything in engineioxide. could you re-run the job?

@Totodore Totodore left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neat!
Just some comments, not exhaustive though as I'm on my phone.
I will do a more thorough review later.

serde.workspace = true
thiserror.workspace = true
futures-core.workspace = true
futures-util = { workspace = true, optional = true }

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, add default-features = false + only pick the features needed. Same goes for the other added deps if they have features.

Comment thread crates/socketioxide-core/src/adapter/mod.rs Outdated
}

#[cfg(test)]
mod tests {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add some tests to validate the behaviour of the AckStream

Co-authored-by: Théodore Prévot <prevottheodore@gmail.com>
Comment thread crates/socketioxide-core/src/adapter/mod.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/mod.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/mod.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/mod.rs Fixed
Comment thread crates/socketioxide-core/src/adapter/stream.rs Fixed
@LiamCarPer

Copy link
Copy Markdown
Contributor Author

Okay, looks like all green man, except socket_io (v4), which i expect to be a flaky e2e test again, try to re run as soon as you can, if not i will do a further analysis to see if maybe it is an actual regression.
And sure dont worry about the through review!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-core Area related to socketioxide-core C-Refactoring Implies a refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move AckStream, DropStream and ResponseHandlers into core behind the remote-adapter feature flag

3 participants