From 2b2af14ee0207858dbe4ede1e743141f75fdaf56 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 7 Oct 2018 12:59:20 +0300 Subject: Change: use more YAML-like output (fewer quoted strings) --- src/format.rs | 56 +++++++++++++++++++++++++++++--------------------------- src/main.rs | 5 ++--- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/format.rs b/src/format.rs index e2d5f92..c88d829 100644 --- a/src/format.rs +++ b/src/format.rs @@ -11,85 +11,87 @@ use walkdir::DirEntry; use chrono::prelude::DateTime; use chrono::{Utc}; use crypto_hash::{Algorithm, Hasher}; +use serde_yaml; -pub fn name(e: &DirEntry) -> String { - e.path().to_string_lossy().to_string() +pub fn name(e: &DirEntry) -> serde_yaml::Value { + serde_yaml::to_value(&e.path().to_string_lossy()).unwrap() } -pub fn mtime(e: &DirEntry) -> String { +pub fn mtime(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); let mtime = meta.modified().unwrap(); let datetime = DateTime::::from(mtime); - datetime.format("%Y-%m-%d %H:%M:%S.%f %z").to_string() + let mtime = datetime.format("%Y-%m-%d %H:%M:%S.%f %z").to_string(); + serde_yaml::to_value(mtime).unwrap() } -pub fn mode(e: &DirEntry) -> String { +pub fn mode(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); let mode = meta.permissions().mode(); - format!("{:06o}", mode) + serde_yaml::to_value(mode).unwrap() } -pub fn inode(e: &DirEntry) -> String { +pub fn inode(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.st_ino()) + serde_yaml::to_value(meta.st_ino()).unwrap() } -pub fn dev(e: &DirEntry) -> String { +pub fn dev(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.st_dev()) + serde_yaml::to_value(meta.st_dev()).unwrap() } -pub fn nlink(e: &DirEntry) -> String { +pub fn nlink(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.st_nlink()) + serde_yaml::to_value(meta.st_nlink()).unwrap() } -pub fn size(e: &DirEntry) -> String { +pub fn size(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.len()) + serde_yaml::to_value(meta.len()).unwrap() } -pub fn uid(e: &DirEntry) -> String { +pub fn uid(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.st_uid()) + serde_yaml::to_value(meta.st_uid()).unwrap() } -pub fn gid(e: &DirEntry) -> String { +pub fn gid(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); - format!("{}", meta.st_gid()) + serde_yaml::to_value(meta.st_gid()).unwrap() } -pub fn username(e: &DirEntry) -> String { +pub fn username(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); if let Some(u) = users::get_user_by_uid(meta.st_uid()) { - format!("{}", u.name()) + serde_yaml::to_value(u.name()).unwrap() } else { - format!("unknown user") + serde_yaml::to_value("unknown user").unwrap() } } -pub fn group(e: &DirEntry) -> String { +pub fn group(e: &DirEntry) -> serde_yaml::Value { let meta = e.metadata().unwrap(); if let Some(g) = users::get_group_by_gid(meta.st_gid()) { - format!("{}", g.name()) + serde_yaml::to_value(g.name()).unwrap() } else { - format!("unknown group") + serde_yaml::to_value("unknown group").unwrap() } } -pub fn sha256(e: &DirEntry) -> String { +pub fn sha256(e: &DirEntry) -> serde_yaml::Value { let mut ok = true; let mut hasher = Hasher::new(Algorithm::SHA256); if let Ok(file) = fs::File::open(e.path()) { @@ -112,8 +114,8 @@ pub fn sha256(e: &DirEntry) -> String { } if ok { let digest = hasher.finish(); - hex::encode(digest) + serde_yaml::to_value(hex::encode(digest)).unwrap() } else { - format!("can't read file") + serde_yaml::to_value(format!("can't read file")).unwrap() } } diff --git a/src/main.rs b/src/main.rs index 8ce3978..3977c40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use rayon::prelude::*; mod format; -type Map = BTreeMap<&'static str, String>; +type Map = BTreeMap<&'static str, serde_yaml::Value>; fn main() -> io::Result<()> { @@ -69,8 +69,7 @@ fn mkmap(e: &DirEntry) -> Map { ("Gid", format::gid(&e)), ("Group", format::group(&e)), ]; - let mut map: BTreeMap<&str, String> = - BTreeMap::from(fields.iter().cloned().collect()); + let mut map: Map = BTreeMap::from(fields.iter().cloned().collect()); if let Ok(m) = e.metadata() { if m.is_file() { -- cgit v1.2.1