summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2020-11-28 14:08:28 +0200
committerLars Wirzenius <liw@liw.fi>2020-11-28 14:08:28 +0200
commitf88bc8e727141cf90b5053d92cf3b3a84d88ae59 (patch)
treea94c643f13b92170a0564dde58e289a6a1f5433a /src/lib.rs
parent4789d4b5f7292b6a48979a07e7b1c057236921c0 (diff)
downloadsummain-rs-f88bc8e727141cf90b5053d92cf3b3a84d88ae59.tar.gz
refactor: split into library and program
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 8b13789..bdf5bed 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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)
+ }
+}