Skip to main content

systemconfiguration/
console_user.rs

1use crate::{bridge, ffi};
2
3#[derive(Clone, Debug, Eq, PartialEq)]
4/// Wraps `SCDynamicStoreCopyConsoleUser` results.
5pub struct ConsoleUser {
6    name: String,
7    uid: u32,
8    gid: u32,
9}
10
11impl ConsoleUser {
12    /// Wraps `SCConsoleUserCopyCurrent`.
13    pub fn current() -> Option<Self> {
14        let raw = unsafe { ffi::console_user::sc_console_user_copy_current() };
15        let raw = unsafe { bridge::OwnedHandle::from_raw(raw) }?;
16        let name = bridge::take_optional_string(unsafe {
17            ffi::console_user::sc_console_user_copy_name(raw.as_ptr())
18        })?;
19        let uid = unsafe { ffi::console_user::sc_console_user_get_uid(raw.as_ptr()) };
20        let gid = unsafe { ffi::console_user::sc_console_user_get_gid(raw.as_ptr()) };
21        Some(Self { name, uid, gid })
22    }
23
24    /// Wraps a helper on `SCDynamicStoreCopyConsoleUser`.
25    pub fn name(&self) -> &str {
26        &self.name
27    }
28
29    /// Wraps a helper on `SCDynamicStoreCopyConsoleUser`.
30    pub fn uid(&self) -> u32 {
31        self.uid
32    }
33
34    /// Wraps a helper on `SCDynamicStoreCopyConsoleUser`.
35    pub fn gid(&self) -> u32 {
36        self.gid
37    }
38}