Add module "task"
This commit is contained in:
parent
2ef347d1f0
commit
9263caa1c2
2 changed files with 23 additions and 16 deletions
21
src/main.rs
21
src/main.rs
|
@ -1,3 +1,7 @@
|
|||
mod task;
|
||||
|
||||
use crate::task::*;
|
||||
|
||||
use std::ffi::CString;
|
||||
|
||||
fn main() {
|
||||
|
@ -5,25 +9,10 @@ fn main() {
|
|||
unsafe { libc::exit(wm_task.wait().status()) }
|
||||
}
|
||||
|
||||
trait Task: Sized {
|
||||
fn start() -> Result<Self, String>;
|
||||
fn wait(self) -> TaskResult;
|
||||
}
|
||||
|
||||
struct TaskResult {
|
||||
status: i32,
|
||||
}
|
||||
|
||||
struct WMTask {
|
||||
pid: libc::pid_t,
|
||||
}
|
||||
|
||||
impl TaskResult {
|
||||
fn status(&self) -> i32 {
|
||||
self.status
|
||||
}
|
||||
}
|
||||
|
||||
impl Task for WMTask {
|
||||
fn start() -> Result<Self, String> {
|
||||
unsafe {
|
||||
|
@ -49,7 +38,7 @@ impl Task for WMTask {
|
|||
let status: i32 = 0;
|
||||
libc::waitpid(self.pid, status as *mut i32, 0);
|
||||
let status = libc::WEXITSTATUS(status);
|
||||
TaskResult { status }
|
||||
TaskResult::new(status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
18
src/task.rs
Normal file
18
src/task.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
pub trait Task: Sized {
|
||||
fn start() -> Result<Self, String>;
|
||||
fn wait(self) -> TaskResult;
|
||||
}
|
||||
|
||||
pub struct TaskResult {
|
||||
status: i32,
|
||||
}
|
||||
|
||||
impl TaskResult {
|
||||
pub fn new(status: i32) -> Self {
|
||||
Self { status }
|
||||
}
|
||||
|
||||
pub fn status(&self) -> i32 {
|
||||
self.status
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue