From 81e13a14a2a8870b0c3e1aa9a34a57cb64173e92 Mon Sep 17 00:00:00 2001 From: sreedevk Date: Sun, 13 Jul 2025 13:40:41 +0000 Subject: [PATCH] reduce memuse: fileinfo uses boxed path instead of pathbuf reduce memuse: fileinfo does not store full metadata --- src/fileinfo.rs | 13 +++++++------ src/formatter.rs | 2 +- src/interactive.rs | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/fileinfo.rs b/src/fileinfo.rs index afee963..9b20015 100644 --- a/src/fileinfo.rs +++ b/src/fileinfo.rs @@ -2,17 +2,18 @@ use anyhow::Result; use gxhash::GxHasher; use memmap2::Mmap; use std::{ - fs::{self, Metadata}, + fs, hash::Hasher, io::Read, - path::PathBuf, + path::{Path, PathBuf}, + time::SystemTime, }; #[derive(Debug, Clone)] pub struct FileInfo { - pub path: PathBuf, + pub path: Box, pub size: u64, - pub filemeta: Metadata, + pub modified: SystemTime, } impl FileInfo { @@ -40,9 +41,9 @@ impl FileInfo { pub fn new(path: PathBuf) -> Result { let filemeta = std::fs::metadata(&path)?; Ok(Self { - path, - filemeta: filemeta.clone(), + path: path.into_boxed_path(), size: filemeta.len(), + modified: filemeta.modified()?, }) } } diff --git a/src/formatter.rs b/src/formatter.rs index aaf8b42..5f5aba2 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -32,7 +32,7 @@ impl Formatter { } pub fn human_mtime(file: &FileInfo) -> Result { - let modified_time: DateTime = file.filemeta.modified()?.into(); + let modified_time: DateTime = file.modified.into(); Ok(modified_time.format("%Y-%m-%d %H:%M:%S").to_string()) } diff --git a/src/interactive.rs b/src/interactive.rs index 65516c0..2d4f87e 100644 --- a/src/interactive.rs +++ b/src/interactive.rs @@ -18,7 +18,7 @@ impl Interactive { itable.set_titles(row!["index", "filename", "size", "updated_at"]); let max_path_size = group .iter() - .map(|f| f.path.clone().into_os_string().len()) + .map(|f| f.path.iter().count()) .max() .unwrap_or_default();