Skip to main content

systemconfiguration/
console_user.rs

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