use super::ExitStatus;
use super::Signal;
use crate::containerization_os::terminal;
use crate::error::Error;
use crate::platform;
use crate::platform::ffi;
pub struct LinuxProcess {
pub(crate) handle: ffi::CzLinuxProcess,
}
unsafe impl Send for LinuxProcess {}
unsafe impl Sync for LinuxProcess {}
impl LinuxProcess {
pub fn id(&self) -> String {
self.handle.id()
}
pub fn pid(&self) -> i32 {
self.handle.pid()
}
pub fn start(&self) -> Result<(), Error> {
platform::outcome(self.handle.start(), format!("start {}", self.id())).map(|_| ())
}
pub fn kill(&self, signal: Signal) -> Result<(), Error> {
platform::outcome(self.handle.kill(signal.raw_value), format!("signal {}", self.id())).map(|_| ())
}
pub fn resize(&self, to: terminal::Size) -> Result<(), Error> {
platform::outcome(self.handle.resize(to.width, to.height), format!("resize {}", self.id())).map(|_| ())
}
pub fn close_stdin(&self) -> Result<(), Error> {
platform::outcome(self.handle.close_stdin(), format!("close {}'s stdin", self.id())).map(|_| ())
}
pub fn wait(&self, timeout_in_seconds: Option<i64>) -> Result<ExitStatus, Error> {
platform::outcome(self.handle.wait(timeout_in_seconds), format!("wait for {}", self.id()))
.map(|outcome| platform::exit_status(&outcome))
}
pub fn delete(&self) -> Result<(), Error> {
platform::outcome(self.handle.delete(), format!("delete {}", self.id())).map(|_| ())
}
}