use crate::js::JsFutureId;
use compact_str::CompactString;
use std::time::Duration;
use tokio::sync::mpsc::Sender;
use tokio::task::JoinHandle;
#[derive(Debug)]
pub enum MasterMessage {
PrintReq(PrintReq),
TimeoutReq(TimeoutReq),
ExitReq(ExitReq),
}
#[derive(Debug)]
pub struct ExitReq {
pub future_id: JsFutureId,
pub exit_code: i32,
}
impl ExitReq {
pub fn new(future_id: JsFutureId, exit_code: i32) -> Self {
ExitReq {
future_id,
exit_code,
}
}
}
#[derive(Debug)]
pub struct PrintReq {
pub future_id: JsFutureId,
pub payload: CompactString,
}
impl PrintReq {
pub fn new(future_id: JsFutureId, payload: CompactString) -> Self {
PrintReq { future_id, payload }
}
}
#[derive(Debug)]
pub struct TimeoutReq {
pub future_id: JsFutureId,
pub duration: Duration,
}
impl TimeoutReq {
pub fn new(future_id: JsFutureId, duration: Duration) -> Self {
TimeoutReq {
future_id,
duration,
}
}
}
pub fn sync_send_to_master(
master_tx: Sender<MasterMessage>,
message: MasterMessage,
) -> JoinHandle<()> {
tokio::runtime::Handle::current().spawn_blocking(move || {
master_tx.blocking_send(message).unwrap();
})
}