use crate::errors::Error;
use crate::scheduler::Scheduler;
use crate::stop_token::StopToken;
use crate::tuple::Tuple;
pub trait Receiver {
fn set_done(self);
fn set_error(self, error: Error);
}
pub trait ReceiverOf<Sch, Values>: Receiver
where
Sch: Scheduler<LocalScheduler = Sch>,
Values: Tuple,
{
fn set_value(self, scheduler: Sch, values: Values);
}
pub trait OperationState<'scope> {
fn start(self);
}
pub trait Sender {}
pub trait TypedSender {
type Value: Tuple;
type Scheduler: Scheduler<LocalScheduler = Self::Scheduler>;
}
pub trait TypedSenderConnect<'a, ScopeImpl, StopTokenImpl, ReceiverType>: TypedSender
where
ReceiverType: ReceiverOf<Self::Scheduler, Self::Value>,
StopTokenImpl: StopToken,
{
type Output<'scope>: 'scope + OperationState<'scope>
where
'a: 'scope,
ScopeImpl: 'scope,
StopTokenImpl: 'scope,
ReceiverType: 'scope;
fn connect<'scope>(
self,
scope: &ScopeImpl,
stop_token: StopTokenImpl,
receiver: ReceiverType,
) -> Self::Output<'scope>
where
'a: 'scope,
ScopeImpl: 'scope,
StopTokenImpl: 'scope,
ReceiverType: 'scope;
}
pub trait BindSender<NestedSender>: Sender {
type Output;
fn bind(self, nested: NestedSender) -> Self::Output;
}