use crate::capture::PermissionObservation;
const NOT_DETERMINED: i32 = 0;
const RESTRICTED: i32 = 1;
const DENIED: i32 = 2;
const AUTHORIZED: i32 = 3;
extern "C" {
fn pks_microphone_authorization_status() -> i32;
}
pub fn microphone_permission_observation() -> PermissionObservation {
permission_observation(unsafe { pks_microphone_authorization_status() })
}
fn permission_observation(status: i32) -> PermissionObservation {
match status {
NOT_DETERMINED => PermissionObservation::NotDetermined,
RESTRICTED => PermissionObservation::Restricted,
DENIED => PermissionObservation::Denied,
AUTHORIZED => PermissionObservation::Allowed,
_ => PermissionObservation::NotObservable,
}
}
#[cfg(test)]
mod tests {
use super::{permission_observation, AUTHORIZED, DENIED, NOT_DETERMINED, RESTRICTED};
use crate::capture::PermissionObservation;
#[test]
fn given_authorization_values_when_mapped_then_every_state_remains_distinct() {
assert_eq!(
permission_observation(NOT_DETERMINED),
PermissionObservation::NotDetermined
);
assert_eq!(
permission_observation(RESTRICTED),
PermissionObservation::Restricted
);
assert_eq!(
permission_observation(DENIED),
PermissionObservation::Denied
);
assert_eq!(
permission_observation(AUTHORIZED),
PermissionObservation::Allowed
);
assert_eq!(
permission_observation(i32::MAX),
PermissionObservation::NotObservable
);
}
}