file_system/fundamentals/identifiers/
file_system.rs1use core::ops::{Add, AddAssign};
2
3#[cfg(target_pointer_width = "32")]
10pub type FileSystemIdentifierInner = u16;
11#[cfg(target_pointer_width = "64")]
12pub type FileSystemIdentifierInner = u32;
13
14#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Ord, PartialOrd)]
19#[repr(transparent)]
20pub struct FileSystemIdentifier(FileSystemIdentifierInner);
21
22impl FileSystemIdentifier {
23 pub const PIPE_FILE_SYSTEM: FileSystemIdentifier = FileSystemIdentifier::new(0);
24 pub const DEVICE_FILE_SYSTEM: FileSystemIdentifier = FileSystemIdentifier::new(1);
25 pub const NETWORK_SOCKET_FILE_SYSTEM: FileSystemIdentifier = FileSystemIdentifier::new(2);
26 pub const LOCAL_SOCKET_FILE_SYSTEM: FileSystemIdentifier = FileSystemIdentifier::new(3);
27
28 pub const MINIMUM: FileSystemIdentifier = FileSystemIdentifier::new(4);
29 pub const MAXIMUM: FileSystemIdentifier =
30 FileSystemIdentifier::new(FileSystemIdentifierInner::MAX);
31
32 pub const fn new(identifier: FileSystemIdentifierInner) -> Self {
33 Self(identifier)
34 }
35
36 pub const fn as_inner(self) -> FileSystemIdentifierInner {
37 self.0
38 }
39}
40
41impl AddAssign<FileSystemIdentifierInner> for FileSystemIdentifier {
42 fn add_assign(&mut self, rhs: FileSystemIdentifierInner) {
43 self.0 += rhs;
44 }
45}
46
47impl Add<FileSystemIdentifierInner> for FileSystemIdentifier {
48 type Output = Self;
49
50 fn add(self, rhs: FileSystemIdentifierInner) -> Self::Output {
51 Self(self.0 + rhs)
52 }
53}
54
55impl From<FileSystemIdentifierInner> for FileSystemIdentifier {
56 fn from(internal_file_system_identifier: FileSystemIdentifierInner) -> Self {
57 FileSystemIdentifier(internal_file_system_identifier)
58 }
59}
60
61impl From<FileSystemIdentifier> for FileSystemIdentifierInner {
62 fn from(internal_file_system_identifier: FileSystemIdentifier) -> Self {
63 internal_file_system_identifier.0
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_file_system_identifier() {
73 let identifier = FileSystemIdentifier::from(0x1234);
74 assert_eq!(identifier, FileSystemIdentifier::new(0x1234));
75 assert_eq!(FileSystemIdentifierInner::from(identifier), 0x1234);
76 }
77}