DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/Utilities/MetadataEncoding.rs
1//! Converts `std::fs::Metadata` to VS Code's `IStat` wire shape. The
2//! `FileType` bits are VS Code's enum (File=1, Directory=2,
3//! SymbolicLink=64); the readdir atoms also emit these values.
4
5use serde_json::{Value, json};
6
7pub fn Fn(Metadata:&std::fs::Metadata) -> Value {
8 let FileType = if Metadata.is_symlink() {
9 64
10 } else if Metadata.is_dir() {
11 2
12 } else {
13 1
14 };
15
16 let Size = Metadata.len();
17
18 let Mtime = Metadata
19 .modified()
20 .ok()
21 .and_then(|T| T.duration_since(std::time::UNIX_EPOCH).ok())
22 .map(|D| D.as_millis() as u64)
23 .unwrap_or(0);
24
25 let Ctime = Metadata
26 .created()
27 .ok()
28 .and_then(|T| T.duration_since(std::time::UNIX_EPOCH).ok())
29 .map(|D| D.as_millis() as u64)
30 .unwrap_or(Mtime);
31
32 json!({
33 "type": FileType,
34 "size": Size,
35 "mtime": Mtime,
36 "ctime": Ctime
37 })
38}