Mountain/IPC/WindServiceHandlers/FileSystem/Native/
FileStatNative.rs1use serde_json::Value;
8
9use crate::{
10 IPC::{
11 DevLog,
12 WindServiceHandlers::Utilities::{
13 MetadataEncoding::Fn as metadata_to_istat,
14 PathExtraction::Fn as extract_path_from_arg,
15 },
16 },
17 dev_log,
18};
19
20pub async fn Fn(Arguments:Vec<Value>) -> Result<Value, String> {
21 let Path = extract_path_from_arg(Arguments.get(0).ok_or("Missing file path")?)?;
22
23 if !DevLog::IsBenignEnoent::Fn(&Path) {
28 dev_log!("vfs-verbose", "stat: {}", Path);
29 }
30
31 let Metadata = tokio::fs::symlink_metadata(&Path).await.map_err(|E| {
32 if DevLog::IsBenignEnoent::Fn(&Path) {
33 DevLog::DebugOnce::Fn(
34 "vfs",
35 &format!("stat-enoent:{}", Path),
36 &format!("stat ENOENT (benign): {}", Path),
37 );
38 } else {
39 dev_log!("vfs", "stat ENOENT: {}", Path);
40 }
41
42 if E.kind() == std::io::ErrorKind::NotFound {
46 format!("stat: {} resource not found (path: {})", E, Path)
47 } else {
48 format!("Failed to stat file: {} (path: {})", E, Path)
49 }
50 })?;
51
52 if !DevLog::IsBenignEnoent::Fn(&Path) {
53 dev_log!("vfs-verbose", "stat OK: {} (dir={})", Path, Metadata.is_dir());
54 }
55
56 Ok(metadata_to_istat(&Metadata))
57}