From 1e2f48f3bd00be26b0be3ab807194317fa58e6f0 Mon Sep 17 00:00:00 2001 From: Benjamin Halsted Date: Mon, 2 Mar 2020 11:53:31 -0800 Subject: [PATCH] feat!: #17 renamed OutgoingMessage.value to values + Also using TinyVec for OutgoingMessage.stream_ids --- Cargo.toml | 2 +- src/lib.rs | 15 ++++++++------- src/multiplexer_senders.rs | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4c6edae..4c12509 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stream_multiplexer" -version = "0.7.0" +version = "0.8.0" authors = ["Benjamin Halsted "] edition = "2018" license = "MIT OR Apache-2.0" diff --git a/src/lib.rs b/src/lib.rs index 935d689..b86bb3a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -228,17 +228,18 @@ impl std::fmt::Debug for IncomingPacket { /// The payload of an OutgoingPacket #[derive(Clone)] pub struct OutgoingMessage { - stream_ids: Vec, - value: tinyvec::TinyVec<[Option; 16]>, + stream_ids: tinyvec::TinyVec<[Option; 16]>, + values: tinyvec::TinyVec<[Option; 16]>, } impl OutgoingMessage { /// Creates a new message that is to be delivered to streams with `ids`. - pub fn new(stream_ids: Vec, values: impl IntoIterator) -> Self { + pub fn new( + stream_ids: impl IntoIterator, + values: impl IntoIterator, + ) -> Self { + let stream_ids = tinyvec::TinyVec::from_iter(stream_ids.into_iter().map(Some)); let values = tinyvec::TinyVec::from_iter(values.into_iter().map(Some)); - Self { - stream_ids, - value: values, - } + Self { stream_ids, values } } } diff --git a/src/multiplexer_senders.rs b/src/multiplexer_senders.rs index 5ebdf76..e52cf48 100644 --- a/src/multiplexer_senders.rs +++ b/src/multiplexer_senders.rs @@ -139,14 +139,14 @@ where } fn handle_new_message(&mut self, mut message: OutgoingMessage) { - for stream_id in message.stream_ids { + for stream_id in message.stream_ids.iter().cloned().flatten() { match self.sender_pairs.entry(stream_id) { Entry::Vacant(_) => { tracing::warn!(stream_id, "Tring to send message to non-existent stream."); } Entry::Occupied(mut sender_pair_entry) => { let mut should_remove = false; - for value in message.value.drain(..).flatten() { + for value in message.values.drain(..).flatten() { let sender_pair = sender_pair_entry.get_mut(); match sender_pair.try_send(value.clone()) { Ok(()) => {