Skip to content

Instantly share code, notes, and snippets.

@VictorKoenders
Created August 22, 2022 14:30
Show Gist options
  • Save VictorKoenders/22187531567c142ad088cf106d247a41 to your computer and use it in GitHub Desktop.
Save VictorKoenders/22187531567c142ad088cf106d247a41 to your computer and use it in GitHub Desktop.
trait ReceiverTask {
type Message;
async fn invoke(&mut self, message: Self::Message);
}
enum ReceiverTaskMessage<M> {
Shutdown,
Timeout,
Message(M),
}
struct Runner<T: ReceiverTask> {
task: JoinHandle<()>,
sender: Sender<ReceiverTaskMessage<T::Message>>,
pd: PhantomData<&'static T>,
}
impl<T: ReceiverTask> Runner<T> {
pub fn shutdown(&self) {
self.sender.send(ReceiverTaskMessage::Shutdown);
}
pub fn timeout(&self) {
self.sender.send(ReceiverTaskMessage::Timeout);
}
pub fn send(&self, message: T::Message) {
self.sender.send(ReceiverTaskMessage::Message(message));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment