handle: jod_thread::JoinHandle<()>,
}
-struct Task {
- req: Request,
- result_tx: Sender<Option<Response>>,
-}
-
-struct Process {
- path: PathBuf,
- args: Vec<OsString>,
- child: Child,
-}
-
-impl Drop for Process {
- fn drop(&mut self) {
- let _ = self.child.kill();
- }
-}
-
-impl Process {
- fn run(
- path: PathBuf,
- args: impl IntoIterator<Item = impl AsRef<OsStr>>,
- ) -> io::Result<Process> {
- let args = args.into_iter().map(|s| s.as_ref().into()).collect();
-
- let child = Command::new(&path)
- .args(&args)
- .stdin(Stdio::piped())
- .stdout(Stdio::piped())
- .stderr(Stdio::null())
- .spawn()?;
-
- Ok(Process { path, args, child })
- }
-
- fn restart(&mut self) -> io::Result<()> {
- let _ = self.child.kill();
- self.child = Command::new(&self.path)
- .args(&self.args)
- .stdin(Stdio::piped())
- .stdout(Stdio::piped())
- .stderr(Stdio::null())
- .spawn()?;
- Ok(())
- }
-
- fn stdio(&mut self) -> Option<(impl Write, impl BufRead)> {
- let stdin = self.child.stdin.take()?;
- let stdout = self.child.stdout.take()?;
- let read = BufReader::new(stdout);
-
- Some((stdin, read))
- }
-}
-
impl ProcMacroProcessSrv {
pub fn run(
process_path: PathBuf,
}
}
+struct Task {
+ req: Request,
+ result_tx: Sender<Option<Response>>,
+}
+
+struct Process {
+ path: PathBuf,
+ args: Vec<OsString>,
+ child: Child,
+}
+
+impl Drop for Process {
+ fn drop(&mut self) {
+ let _ = self.child.kill();
+ }
+}
+
+impl Process {
+ fn run(
+ path: PathBuf,
+ args: impl IntoIterator<Item = impl AsRef<OsStr>>,
+ ) -> io::Result<Process> {
+ let args = args.into_iter().map(|s| s.as_ref().into()).collect();
+ let child = mk_child(&path, &args)?;
+ Ok(Process { path, args, child })
+ }
+
+ fn restart(&mut self) -> io::Result<()> {
+ let _ = self.child.kill();
+ self.child = mk_child(&self.path, &self.args)?;
+ Ok(())
+ }
+
+ fn stdio(&mut self) -> Option<(impl Write, impl BufRead)> {
+ let stdin = self.child.stdin.take()?;
+ let stdout = self.child.stdout.take()?;
+ let read = BufReader::new(stdout);
+
+ Some((stdin, read))
+ }
+}
+
+fn mk_child(path: &Path, args: impl IntoIterator<Item = impl AsRef<OsStr>>) -> io::Result<Child> {
+ Command::new(&path)
+ .args(args)
+ .stdin(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::null())
+ .spawn()
+}
+
fn send_request(
mut writer: &mut impl Write,
mut reader: &mut impl BufRead,