diff --git a/src/channel.rs b/src/channel.rs index 158e21a..3ce9e7d 100644 --- a/src/channel.rs +++ b/src/channel.rs @@ -10,10 +10,26 @@ where ST: ChannelSender, SR: ChannelReceiver>, { - pub(crate) request_tx: ST, - pub(crate) response_rx: SR, - pub(crate) closed: AtomicBool, - pub(crate) _phantom: std::marker::PhantomData, + request_tx: ST, + response_rx: SR, + closed: AtomicBool, + _phantom: std::marker::PhantomData, +} + +impl Sucker +where + ST: ChannelSender, + SR: ChannelReceiver>, +{ + /// Create a new Sucker instance + pub(crate) fn new(request_tx: ST, response_rx: SR) -> Self { + Self { + request_tx, + response_rx, + closed: AtomicBool::new(false), + _phantom: std::marker::PhantomData, + } + } } /// The producer side of the channel that provides values @@ -22,10 +38,26 @@ where SR: ChannelReceiver, ST: ChannelSender>, { - pub(crate) request_rx: SR, - pub(crate) response_tx: ST, - pub(crate) state: ChannelState, - pub(crate) _phantom: std::marker::PhantomData, + request_rx: SR, + response_tx: ST, + state: ChannelState, + _phantom: std::marker::PhantomData, +} + +impl Sourcer +where + SR: ChannelReceiver, + ST: ChannelSender>, +{ + /// Create a new Sourcer instance + pub(crate) fn new(request_rx: SR, response_tx: ST, state: ChannelState) -> Self { + Self { + request_rx, + response_tx, + state, + _phantom: std::marker::PhantomData, + } + } } impl Sourcer diff --git a/src/sync/crossbeam.rs b/src/sync/crossbeam.rs index 35a99f4..99c6a9c 100644 --- a/src/sync/crossbeam.rs +++ b/src/sync/crossbeam.rs @@ -1,5 +1,3 @@ -use std::sync::atomic::AtomicBool; - #[cfg(feature = "sync-crossbeam")] use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::types; @@ -66,19 +64,8 @@ impl CrossbeamSuck { let state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None)); - let sucker = crate::Sucker { - request_tx, - response_rx, - closed: AtomicBool::new(false), - _phantom: std::marker::PhantomData, - }; - - let sourcer = crate::Sourcer { - request_rx, - response_tx, - state: std::sync::Arc::clone(&state), - _phantom: std::marker::PhantomData, - }; + let sucker = crate::Sucker::new(request_tx, response_rx); + let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state)); (sucker, sourcer) } diff --git a/src/sync/flume.rs b/src/sync/flume.rs index 14a0a79..a493513 100644 --- a/src/sync/flume.rs +++ b/src/sync/flume.rs @@ -1,5 +1,3 @@ -use std::sync::atomic::AtomicBool; - #[cfg(feature = "sync-flume")] use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::types; @@ -66,19 +64,8 @@ impl FlumeSuck { let state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None)); - let sucker = crate::Sucker { - request_tx, - response_rx, - closed: AtomicBool::new(false), - _phantom: std::marker::PhantomData, - }; - - let sourcer = crate::Sourcer { - request_rx, - response_tx, - state: std::sync::Arc::clone(&state), - _phantom: std::marker::PhantomData, - }; + let sucker = crate::Sucker::new(request_tx, response_rx); + let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state)); (sucker, sourcer) } diff --git a/src/sync/std.rs b/src/sync/std.rs index 2038543..f58a845 100644 --- a/src/sync/std.rs +++ b/src/sync/std.rs @@ -1,6 +1,5 @@ use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::types; -use std::sync::atomic::AtomicBool; #[cfg(feature = "sync-std")] use std::sync::mpsc; @@ -63,19 +62,8 @@ impl StdSuck { let state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None)); - let sucker = crate::Sucker { - request_tx, - response_rx, - closed: AtomicBool::new(false), - _phantom: std::marker::PhantomData, - }; - - let sourcer = crate::Sourcer { - request_rx, - response_tx, - state: std::sync::Arc::clone(&state), - _phantom: std::marker::PhantomData, - }; + let sucker = crate::Sucker::new(request_tx, response_rx); + let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state)); (sucker, sourcer) }