use crate::buf::BufferId;
use crate::js::TaskId;
use crate::js::TimerId;
use crate::js::binding::global_rsvim::fs::open::FsOpenOptions;
use crate::js::resource::ResourceId;
use crate::prelude::*;
use tokio::sync::mpsc::UnboundedSender;
use tokio::time::Instant;
#[derive(Debug)]
pub enum MasterMessage {
TimeoutReq(TimeoutReq),
ExitReq(ExitReq),
LoadImportReq(LoadImportReq),
TickAgainReq,
FsOpenReq(FsOpenReq),
FsReadReq(FsReadReq),
FsWriteReq(FsWriteReq),
FsReadFileReq(FsReadFileReq),
FsReadTextFileReq(FsReadTextFileReq),
SyntaxEditReq(SyntaxEditReq),
SyntaxEditResp(SyntaxEditResp),
LoadTreeSitterParserReq(LoadTreeSitterParserReq),
}
#[derive(Debug)]
pub struct ExitReq {
pub exit_code: i32,
}
#[derive(Debug)]
pub struct TimeoutReq {
pub timer_id: TimerId,
pub start_at: Instant,
pub delay: u32,
pub repeated: bool,
}
#[derive(Debug)]
pub struct LoadImportReq {
pub task_id: TaskId,
pub specifier: String,
}
#[derive(Debug)]
pub struct FsOpenReq {
pub task_id: TaskId,
pub path: PathBuf,
pub options: FsOpenOptions,
}
#[derive(Debug)]
pub struct FsReadReq {
pub task_id: TaskId,
pub file_rid: ResourceId,
pub bufsize: usize,
}
#[derive(Debug)]
pub struct FsWriteReq {
pub task_id: TaskId,
pub file_rid: ResourceId,
pub buf: Vec<u8>,
}
#[derive(Debug)]
pub struct FsReadFileReq {
pub task_id: TaskId,
pub path: PathBuf,
}
#[derive(Debug)]
pub struct FsReadTextFileReq {
pub task_id: TaskId,
pub path: PathBuf,
}
#[derive(Debug)]
pub struct SyntaxEditReq {
pub buffer_id: BufferId,
}
#[derive(Debug)]
pub struct SyntaxEditResp {
pub buffer_id: BufferId,
}
#[derive(Debug)]
pub struct LoadTreeSitterParserReq {
pub task_id: TaskId,
pub grammar_path: PathBuf,
}
pub fn send_to_master(
master_tx: UnboundedSender<MasterMessage>,
message: MasterMessage,
) {
master_tx.send(message).unwrap();
}