1use bitflags::bitflags;
5use std::fmt;
6
7bitflags! {
8 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
9 pub struct PermissionFlags: u32 {
10 const R = pw_sys::PW_PERM_R;
11 const W = pw_sys::PW_PERM_W;
12 const X = pw_sys::PW_PERM_X;
13 const M = pw_sys::PW_PERM_M;
14 #[cfg(feature = "v0_3_77")]
15 const L = pw_sys::PW_PERM_L;
16 }
17}
18
19#[derive(Clone, Copy)]
20#[repr(transparent)]
21pub struct Permission(pw_sys::pw_permission);
22
23impl Permission {
24 pub fn new(id: u32, flags: PermissionFlags) -> Self {
25 Self(pw_sys::pw_permission {
26 id,
27 permissions: flags.bits(),
28 })
29 }
30
31 pub fn id(&self) -> u32 {
32 self.0.id
33 }
34
35 pub fn set_id(&mut self, id: u32) {
36 self.0.id = id;
37 }
38
39 pub fn permission_flags(&self) -> PermissionFlags {
40 PermissionFlags::from_bits_retain(self.0.permissions)
41 }
42
43 pub fn set_permission_flags(&mut self, flags: PermissionFlags) {
44 self.0.permissions = flags.bits();
45 }
46}
47
48impl fmt::Debug for Permission {
49 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50 f.debug_struct("Permission")
51 .field("id", &self.id())
52 .field("permission_flags", &self.permission_flags())
53 .finish()
54 }
55}