1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::{FromInner, IntoInner};
use uv::uv_stat_t;

/// Portable equivalent of struct stat.
pub struct Stat {
    pub dev: u64,
    pub mode: u64,
    pub nlink: u64,
    pub uid: u64,
    pub gid: u64,
    pub rdev: u64,
    pub ino: u64,
    pub size: u64,
    pub blksize: u64,
    pub blocks: u64,
    pub flags: u64,
    pub gen: u64,
    pub atim: crate::TimeSpec,
    pub mtim: crate::TimeSpec,
    pub ctim: crate::TimeSpec,
    pub birthtim: crate::TimeSpec,
}

impl FromInner<*const uv_stat_t> for Stat {
    fn from_inner(stat: *const uv_stat_t) -> Stat {
        unsafe {
            Stat {
                dev: (*stat).st_dev,
                mode: (*stat).st_mode,
                nlink: (*stat).st_nlink,
                uid: (*stat).st_uid,
                gid: (*stat).st_gid,
                rdev: (*stat).st_rdev,
                ino: (*stat).st_ino,
                size: (*stat).st_size,
                blksize: (*stat).st_blksize,
                blocks: (*stat).st_blocks,
                flags: (*stat).st_flags,
                gen: (*stat).st_gen,
                atim: (*stat).st_atim.into_inner(),
                mtim: (*stat).st_mtim.into_inner(),
                ctim: (*stat).st_ctim.into_inner(),
                birthtim: (*stat).st_birthtim.into_inner(),
            }
        }
    }
}