mirror of
https://github.com/callumio/suck.git
synced 2025-12-17 03:29:21 +00:00
feat: add internal constructor for Sucker/Sourcer
This commit is contained in:
parent
ca4825552f
commit
4dd7df50e1
4 changed files with 46 additions and 52 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue