use std::ffi::OsStr;
use endpoint_sec_sys::{es_event_authorization_petition_t, es_string_token_t};
use crate::Process;
#[doc(alias = "es_event_authorization_petition_t")]
pub struct EventAuthorizationPetition<'a> {
pub(crate) raw: &'a es_event_authorization_petition_t,
pub(crate) version: u32,
}
impl<'a> EventAuthorizationPetition<'a> {
#[inline(always)]
pub fn instigator(&self) -> Process<'a> {
Process::new(unsafe { self.raw.instigator.as_ref() }, self.version)
}
#[inline(always)]
pub fn petitioner(&self) -> Option<Process<'a>> {
Some(Process::new(
unsafe { self.raw.petitioner.as_ref()? },
self.version,
))
}
#[inline(always)]
pub fn flags(&self) -> u32 {
self.raw.flags
}
#[inline(always)]
pub fn right_count(&self) -> usize {
self.raw.right_count
}
#[inline(always)]
pub fn rights<'event>(&'event self) -> AuthorizationPetitionRights<'event, 'a> {
AuthorizationPetitionRights::new(self)
}
}
unsafe impl Send for EventAuthorizationPetition<'_> {}
impl_debug_eq_hash_with_functions!(EventAuthorizationPetition<'a> with version; instigator, petitioner, flags, right_count);
unsafe fn read_nth_right(raw: &es_event_authorization_petition_t, idx: usize) -> es_string_token_t {
std::ptr::read(raw.rights.add(idx))
}
make_event_data_iterator!(
EventAuthorizationPetition;
AuthorizationPetitionRights with right_count (usize);
&'raw OsStr;
read_nth_right,
super::as_os_str,
);