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>, ST: ChannelSender<Request>,
SR: ChannelReceiver<Response<T>>, SR: ChannelReceiver<Response<T>>,
{ {
pub(crate) request_tx: ST, request_tx: ST,
pub(crate) response_rx: SR, response_rx: SR,
pub(crate) closed: AtomicBool, closed: AtomicBool,
pub(crate) _phantom: std::marker::PhantomData<T>, _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 /// The producer side of the channel that provides values
@ -22,10 +38,26 @@ where
SR: ChannelReceiver<Request>, SR: ChannelReceiver<Request>,
ST: ChannelSender<Response<T>>, ST: ChannelSender<Response<T>>,
{ {
pub(crate) request_rx: SR, request_rx: SR,
pub(crate) response_tx: ST, response_tx: ST,
pub(crate) state: ChannelState<T>, state: ChannelState<T>,
pub(crate) _phantom: std::marker::PhantomData<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> impl<T, SR, ST> Sourcer<T, SR, ST>

View file

@ -1,5 +1,3 @@
use std::sync::atomic::AtomicBool;
#[cfg(feature = "sync-crossbeam")] #[cfg(feature = "sync-crossbeam")]
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types; 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 state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None));
let sucker = crate::Sucker { let sucker = crate::Sucker::new(request_tx, response_rx);
request_tx, let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state));
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,
};
(sucker, sourcer) (sucker, sourcer)
} }

View file

@ -1,5 +1,3 @@
use std::sync::atomic::AtomicBool;
#[cfg(feature = "sync-flume")] #[cfg(feature = "sync-flume")]
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types; 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 state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None));
let sucker = crate::Sucker { let sucker = crate::Sucker::new(request_tx, response_rx);
request_tx, let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state));
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,
};
(sucker, sourcer) (sucker, sourcer)
} }

View file

@ -1,6 +1,5 @@
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType}; use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types; use crate::types;
use std::sync::atomic::AtomicBool;
#[cfg(feature = "sync-std")] #[cfg(feature = "sync-std")]
use std::sync::mpsc; 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 state = std::sync::Arc::new(std::sync::Mutex::new(crate::types::ValueSource::None));
let sucker = crate::Sucker { let sucker = crate::Sucker::new(request_tx, response_rx);
request_tx, let sourcer = crate::Sourcer::new(request_rx, response_tx, std::sync::Arc::clone(&state));
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,
};
(sucker, sourcer) (sucker, sourcer)
} }