Refactor out JodChild

This commit is contained in:
Edwin Cheng 2021-01-08 01:08:34 +08:00
parent 1347b7fa4c
commit 54eb87de03
4 changed files with 25 additions and 23 deletions

1
Cargo.lock generated
View file

@ -427,6 +427,7 @@ dependencies = [
"jod-thread", "jod-thread",
"log", "log",
"serde_json", "serde_json",
"stdx",
"toolchain", "toolchain",
] ]

View file

@ -17,3 +17,4 @@ serde_json = "1.0.48"
jod-thread = "0.1.1" jod-thread = "0.1.1"
toolchain = { path = "../toolchain", version = "0.0.0" } toolchain = { path = "../toolchain", version = "0.0.0" }
stdx = { path = "../stdx", version = "0.0.0" }

View file

@ -5,13 +5,13 @@
use std::{ use std::{
fmt, fmt,
io::{self, BufReader}, io::{self, BufReader},
ops,
path::PathBuf, path::PathBuf,
process::{self, Command, Stdio}, process::{self, Command, Stdio},
time::Duration, time::Duration,
}; };
use crossbeam_channel::{never, select, unbounded, Receiver, Sender}; use crossbeam_channel::{never, select, unbounded, Receiver, Sender};
use stdx::JodChild;
pub use cargo_metadata::diagnostic::{ pub use cargo_metadata::diagnostic::{
Applicability, Diagnostic, DiagnosticCode, DiagnosticLevel, DiagnosticSpan, Applicability, Diagnostic, DiagnosticCode, DiagnosticLevel, DiagnosticSpan,
@ -323,24 +323,3 @@ impl CargoActor {
Ok(read_at_least_one_message) Ok(read_at_least_one_message)
} }
} }
struct JodChild(process::Child);
impl ops::Deref for JodChild {
type Target = process::Child;
fn deref(&self) -> &process::Child {
&self.0
}
}
impl ops::DerefMut for JodChild {
fn deref_mut(&mut self) -> &mut process::Child {
&mut self.0
}
}
impl Drop for JodChild {
fn drop(&mut self) {
let _ = self.0.kill();
}
}

View file

@ -1,5 +1,5 @@
//! Missing batteries for standard libraries. //! Missing batteries for standard libraries.
use std::time::Instant; use std::{ops, process, time::Instant};
mod macros; mod macros;
pub mod panic_context; pub mod panic_context;
@ -147,6 +147,27 @@ where
left left
} }
pub struct JodChild(pub process::Child);
impl ops::Deref for JodChild {
type Target = process::Child;
fn deref(&self) -> &process::Child {
&self.0
}
}
impl ops::DerefMut for JodChild {
fn deref_mut(&mut self) -> &mut process::Child {
&mut self.0
}
}
impl Drop for JodChild {
fn drop(&mut self) {
let _ = self.0.kill();
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;