use crate::Result;
use std::convert::TryInto;
pub(crate) use super::sys_impl::filetime::*;
cfg_if::cfg_if! {
if #[cfg(not(target_os = "emscripten"))] {
fn filetime_to_timespec(ft: &filetime::FileTime) -> Result<libc::timespec> {
Ok(
libc::timespec {
tv_sec: ft.seconds(),
tv_nsec: ft.nanoseconds().try_into()?,
}
)
}
} else {
fn filetime_to_timespec(ft: &filetime::FileTime) -> Result<libc::timespec> {
Ok(
libc::timespec {
tv_sec: ft.seconds().try_into()?,
tv_nsec: ft.nanoseconds().try_into()?,
}
)
}
}
}
#[derive(Debug, Copy, Clone)]
pub(crate) enum FileTime {
Now,
Omit,
FileTime(filetime::FileTime),
}
pub(crate) fn to_timespec(ft: &FileTime) -> Result<libc::timespec> {
let ts = match ft {
FileTime::Now => libc::timespec {
tv_sec: 0,
tv_nsec: UTIME_NOW,
},
FileTime::Omit => libc::timespec {
tv_sec: 0,
tv_nsec: UTIME_OMIT,
},
FileTime::FileTime(ft) => filetime_to_timespec(ft)?,
};
Ok(ts)
}