From 44466f16cfce136d2cfe4986128551f5f83b7a64 Mon Sep 17 00:00:00 2001 From: rm-dr <96270320+rm-dr@users.noreply.github.com> Date: Sat, 21 Mar 2026 10:00:12 -0700 Subject: [PATCH] Tweak `fs` extractor --- crates/pile-value/src/extract/item/fs.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/pile-value/src/extract/item/fs.rs b/crates/pile-value/src/extract/item/fs.rs index d1d21fd..65afa76 100644 --- a/crates/pile-value/src/extract/item/fs.rs +++ b/crates/pile-value/src/extract/item/fs.rs @@ -5,7 +5,7 @@ use crate::{ use pile_config::Label; use std::{ collections::HashMap, - path::Component, + path::{Component, PathBuf}, sync::{Arc, OnceLock}, }; @@ -27,22 +27,20 @@ impl FsExtractor { return Ok(x); } - let Item::File { path, .. } = &self.item else { - return Ok(self.output.get_or_init(HashMap::new)); - }; + let path = PathBuf::from(self.item.key().as_str()); let mut root = false; let components = path .components() - .map(|x| match x { + .filter_map(|x| match x { Component::CurDir => None, - Component::Normal(x) => x.to_str().map(|x| x.to_owned()), - Component::ParentDir => Some("..".to_owned()), + Component::Normal(x) => Some(x.to_str().map(|x| x.to_owned())), + Component::ParentDir => Some(Some("..".to_owned())), Component::RootDir => { root = true; - None + Some(None) } - Component::Prefix(x) => x.as_os_str().to_str().map(|x| x.to_owned()), + Component::Prefix(x) => Some(x.as_os_str().to_str().map(|x| x.to_owned())), }) .collect::>>(); @@ -69,6 +67,7 @@ impl FsExtractor { ( Label::new("segments").unwrap(), components + .clone() .map(|x| { PileValue::Array(Arc::new( x.iter() @@ -78,6 +77,12 @@ impl FsExtractor { }) .unwrap_or(PileValue::Null), ), + ( + Label::new("name").unwrap(), + components + .and_then(|x| x.last().map(|x| PileValue::String(Arc::new(x.into())))) + .unwrap_or(PileValue::Null), + ), ]); return Ok(self.output.get_or_init(|| output));