feat: add internal constructor for Sucker/Sourcer

This commit is contained in:
Callum Leslie 2025-09-16 08:26:24 +01:00
parent ca4825552f
commit 4dd7df50e1
Signed by: cleslie
GPG key ID: D382C4AFEECEAA90
4 changed files with 46 additions and 52 deletions

View file

@ -10,10 +10,26 @@ where
ST: ChannelSender<Request>,
SR: ChannelReceiver<Response<T>>,
{
pub(crate) request_tx: ST,
pub(crate) response_rx: SR,
pub(crate) closed: AtomicBool,
pub(crate) _phantom: std::marker::PhantomData<T>,
request_tx: ST,
response_rx: SR,
closed: AtomicBool,
_phantom: std::marker::PhantomData<T>,
}
impl<T, ST, SR> Sucker<T, ST, SR>
where
ST: ChannelSender<Request>,
SR: ChannelReceiver<Response<T>>,
{
/// 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<Request>,
ST: ChannelSender<Response<T>>,
{
pub(crate) request_rx: SR,
pub(crate) response_tx: ST,
pub(crate) state: ChannelState<T>,
pub(crate) _phantom: std::marker::PhantomData<T>,
request_rx: SR,
response_tx: ST,
state: ChannelState<T>,
_phantom: std::marker::PhantomData<T>,
}
impl<T, SR, ST> Sourcer<T, SR, ST>
where
SR: ChannelReceiver<Request>,
ST: ChannelSender<Response<T>>,
{
/// Create a new Sourcer instance
pub(crate) fn new(request_rx: SR, response_tx: ST, state: ChannelState<T>) -> Self {
Self {
request_rx,
response_tx,
state,
_phantom: std::marker::PhantomData,
}
}
}
impl<T, SR, ST> Sourcer<T, SR, ST>

View file

@ -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<T> CrossbeamSuck<T> {
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)
}

View file

@ -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<T> FlumeSuck<T> {
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)
}

View file

@ -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<T> StdSuck<T> {
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)
}