Skip to main content

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}