Add module "task"

This commit is contained in:
Alex Kotov 2021-12-05 20:26:22 +05:00
parent 2ef347d1f0
commit 9263caa1c2
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08
2 changed files with 23 additions and 16 deletions

View file

@ -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
View 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
}
}