1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use core::fmt;
use crate::protocol::common::FileType;
#[repr(transparent)]
#[derive(Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct FileMode(pub u32);
impl FileMode {
pub fn file_type(&self) -> Option<FileType> {
FileType::from_mode(*self)
}
}
impl From<u32> for FileMode {
fn from(mode: u32) -> Self {
Self(mode)
}
}
impl From<FileMode> for u32 {
fn from(mode: FileMode) -> Self {
mode.0
}
}
impl core::ops::BitOr<FileType> for FileMode {
type Output = FileMode;
fn bitor(self, rhs: FileType) -> FileMode {
FileMode(rhs.mode_bits() | self.0)
}
}
impl core::ops::BitOr<FileMode> for FileType {
type Output = FileMode;
fn bitor(self, rhs: FileMode) -> FileMode {
FileMode(self.mode_bits() | rhs.0)
}
}
impl core::ops::BitOr<FileType> for u32 {
type Output = FileMode;
fn bitor(self, rhs: FileType) -> FileMode {
FileMode(rhs.mode_bits() | self)
}
}
impl core::ops::BitOr<u32> for FileType {
type Output = FileMode;
fn bitor(self, rhs: u32) -> FileMode {
FileMode(self.mode_bits() | rhs)
}
}
impl PartialEq<u32> for FileMode {
fn eq(&self, mode: &u32) -> bool {
self.0 == *mode
}
}
impl PartialEq<FileMode> for u32 {
fn eq(&self, mode: &FileMode) -> bool {
*self == mode.0
}
}
impl fmt::Debug for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(self, fmt)
}
}
impl fmt::Display for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "{:#o}", self.0)
}
}
impl fmt::Octal for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(fmt)
}
}
impl fmt::Binary for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(fmt)
}
}
impl fmt::LowerHex for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(fmt)
}
}
impl fmt::UpperHex for FileMode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(fmt)
}
}