pipewire/
permissions.rs

1// Copyright The pipewire-rs Contributors.
2// SPDX-License-Identifier: MIT
3
4use 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}