diff options
author | Lars Wirzenius <liw@liw.fi> | 2020-11-28 14:08:28 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2020-11-28 14:08:28 +0200 |
commit | f88bc8e727141cf90b5053d92cf3b3a84d88ae59 (patch) | |
tree | a94c643f13b92170a0564dde58e289a6a1f5433a /src/lib.rs | |
parent | 4789d4b5f7292b6a48979a07e7b1c057236921c0 (diff) | |
download | summain-rs-f88bc8e727141cf90b5053d92cf3b3a84d88ae59.tar.gz |
refactor: split into library and program
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -1 +1,44 @@ +use serde::Serialize; +use std::fs::Metadata; +use std::os::linux::fs::MetadataExt; +use std::path::{Path, PathBuf}; +#[derive(Serialize, Debug)] +pub struct Entry { + path: PathBuf, + atime: i64, + atime_nsec: i64, + #[serde(with = "mode")] + mode: u32, + mtime: i64, + mtime_nsec: i64, + nlink: u64, + size: Option<u64>, +} + +impl Entry { + pub fn new(path: &Path, m: Metadata) -> Self { + Self { + path: path.to_path_buf(), + atime: m.st_atime(), + atime_nsec: m.st_atime_nsec(), + mode: m.st_mode(), + mtime: m.st_mtime(), + mtime_nsec: m.st_mtime_nsec(), + nlink: m.st_nlink(), + size: if m.is_dir() { None } else { Some(m.st_size()) }, + } + } +} + +mod mode { + use serde::{self, Serializer}; + + pub fn serialize<S>(mode: &u32, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + let s = unix_mode::to_string(*mode); + serializer.serialize_str(&s) + } +} |