1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::error;
use std::fs;
use std::io;
use std::time;

pub struct ProcessMetadata {
    pid: u32,
    metadata: fs::Metadata,
}

impl ProcessMetadata {
    pub fn new(pid: u32) -> Result<Self, io::Error> {
        let metadata = fs::metadata(format!("/proc/{}", pid))?;

        Ok(Self { pid, metadata })
    }

    pub fn uptime(&self) -> Result<time::Duration, Box<dyn error::Error>> {
        Ok(self.metadata.modified()?.elapsed()?)
    }
    pub fn pid(&self) -> u32 {
        self.pid
    }
}