cap_fs_ext/
metadata_ext.rs1#[cfg(windows)]
2use cap_primitives::fs::_WindowsByHandle;
3
4pub trait MetadataExt {
6 fn dev(&self) -> u64;
13
14 fn ino(&self) -> u64;
23
24 fn nlink(&self) -> u64;
31}
32
33#[cfg(not(windows))]
34impl MetadataExt for std::fs::Metadata {
35 #[inline]
36 fn dev(&self) -> u64 {
37 std::os::unix::fs::MetadataExt::dev(self)
38 }
39
40 #[inline]
41 fn ino(&self) -> u64 {
42 std::os::unix::fs::MetadataExt::ino(self)
43 }
44
45 #[inline]
46 fn nlink(&self) -> u64 {
47 std::os::unix::fs::MetadataExt::nlink(self)
48 }
49}
50
51#[cfg(all(windows, windows_by_handle))]
52impl MetadataExt for std::fs::Metadata {
53 #[inline]
54 fn dev(&self) -> u64 {
55 std::os::windows::fs::MetadataExt::volume_serial_number(self)
56 .expect("`dev` depends on a Metadata constructed from an open `File`")
57 .into()
58 }
59
60 #[inline]
61 fn ino(&self) -> u64 {
62 std::os::windows::fs::MetadataExt::file_index(self)
63 .expect("`ino` depends on a Metadata constructed from an open `File`")
64 }
65
66 #[inline]
67 fn nlink(&self) -> u64 {
68 std::os::windows::fs::MetadataExt::number_of_links(self)
69 .expect("`nlink` depends on a Metadata constructed from an open `File`")
70 .into()
71 }
72}
73
74#[cfg(all(not(windows), any(feature = "std", feature = "async_std")))]
75impl MetadataExt for cap_primitives::fs::Metadata {
76 #[inline]
77 fn dev(&self) -> u64 {
78 cap_primitives::fs::MetadataExt::dev(self)
79 }
80
81 #[inline]
82 fn ino(&self) -> u64 {
83 cap_primitives::fs::MetadataExt::ino(self)
84 }
85
86 #[inline]
87 fn nlink(&self) -> u64 {
88 cap_primitives::fs::MetadataExt::nlink(self)
89 }
90}
91
92#[cfg(all(windows, any(feature = "std", feature = "async_std")))]
93impl MetadataExt for cap_primitives::fs::Metadata {
94 fn dev(&self) -> u64 {
95 _WindowsByHandle::volume_serial_number(self)
96 .expect("`dev` depends on a Metadata constructed from an open `File`")
97 .into()
98 }
99
100 #[inline]
101 fn ino(&self) -> u64 {
102 _WindowsByHandle::file_index(self)
103 .expect("`ino` depends on a Metadata constructed from an open `File`")
104 }
105
106 #[inline]
107 fn nlink(&self) -> u64 {
108 _WindowsByHandle::number_of_links(self)
109 .expect("`nlink` depends on a Metadata constructed from an open `File`")
110 .into()
111 }
112}