From 962df75f856fbb9bc088610d6614d8108976e8d3 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 18 Oct 2026 03:17:03 +0200 Subject: [PATCH] refactor(permission-manager): deduplicate kind mapping into CapabilityKind::index/from_index --- .../permission-manager/src/protocol.rs | 71 ++++++++++--------- .../servers/permission-manager/src/server.rs | 20 +----- 2 files changed, 40 insertions(+), 51 deletions(-) diff --git a/crates/servers/permission-manager/src/protocol.rs b/crates/servers/permission-manager/src/protocol.rs index e453ed9..3f387f7 100644 --- a/crates/servers/permission-manager/src/protocol.rs +++ b/crates/servers/permission-manager/src/protocol.rs @@ -13,6 +13,37 @@ pub enum CapabilityKind { Bluetooth, } +impl CapabilityKind { + pub fn index(self) -> usize { + match self { + Self::Display => 0, + Self::Input => 1, + Self::AudioPlayback => 2, + Self::AudioCapture => 3, + Self::Camera => 4, + Self::Storage => 5, + Self::Network => 6, + Self::Gps => 7, + Self::Bluetooth => 8, + } + } + + pub fn from_index(v: usize) -> Option { + match v { + 0 => Some(Self::Display), + 1 => Some(Self::Input), + 2 => Some(Self::AudioPlayback), + 3 => Some(Self::AudioCapture), + 4 => Some(Self::Camera), + 5 => Some(Self::Storage), + 6 => Some(Self::Network), + 7 => Some(Self::Gps), + 8 => Some(Self::Bluetooth), + _ => None, + } + } +} + #[derive(Debug, PartialEq)] pub enum PermissionRequest { RequestCapability { process: u16, kind: CapabilityKind }, @@ -30,46 +61,18 @@ pub enum PermissionResponse { GrantedList(u16), } -fn encode_kind(kind: CapabilityKind) -> usize { - match kind { - CapabilityKind::Display => 0, - CapabilityKind::Input => 1, - CapabilityKind::AudioPlayback => 2, - CapabilityKind::AudioCapture => 3, - CapabilityKind::Camera => 4, - CapabilityKind::Storage => 5, - CapabilityKind::Network => 6, - CapabilityKind::Gps => 7, - CapabilityKind::Bluetooth => 8, - } -} - -fn decode_kind(v: usize) -> Option { - match v { - 0 => Some(CapabilityKind::Display), - 1 => Some(CapabilityKind::Input), - 2 => Some(CapabilityKind::AudioPlayback), - 3 => Some(CapabilityKind::AudioCapture), - 4 => Some(CapabilityKind::Camera), - 5 => Some(CapabilityKind::Storage), - 6 => Some(CapabilityKind::Network), - 7 => Some(CapabilityKind::Gps), - 8 => Some(CapabilityKind::Bluetooth), - _ => None, - } -} impl Encode for PermissionRequest { fn encode(&self) -> [usize; 4] { match self { PermissionRequest::RequestCapability { process, kind } => { - [0, *process as usize, encode_kind(*kind), 0] + [0, *process as usize, kind.index(), 0] } PermissionRequest::RevokeCapability { process, kind } => { - [1, *process as usize, encode_kind(*kind), 0] + [1, *process as usize, kind.index(), 0] } PermissionRequest::CheckCapability { process, kind } => { - [2, *process as usize, encode_kind(*kind), 0] + [2, *process as usize, kind.index(), 0] } PermissionRequest::ListGranted { process } => { [3, *process as usize, 0, 0] @@ -83,15 +86,15 @@ impl Decode for PermissionRequest { match words[0] { 0 => Some(PermissionRequest::RequestCapability { process: words[1] as u16, - kind: decode_kind(words[2])?, + kind: CapabilityKind::from_index(words[2])?, }), 1 => Some(PermissionRequest::RevokeCapability { process: words[1] as u16, - kind: decode_kind(words[2])?, + kind: CapabilityKind::from_index(words[2])?, }), 2 => Some(PermissionRequest::CheckCapability { process: words[1] as u16, - kind: decode_kind(words[2])?, + kind: CapabilityKind::from_index(words[2])?, }), 3 => Some(PermissionRequest::ListGranted { process: words[1] as u16, diff --git a/crates/servers/permission-manager/src/server.rs b/crates/servers/permission-manager/src/server.rs index e5c52ec..f09e9cb 100644 --- a/crates/servers/permission-manager/src/server.rs +++ b/crates/servers/permission-manager/src/server.rs @@ -16,20 +16,6 @@ impl PermissionManager { } } - fn kind_index(kind: CapabilityKind) -> usize { - match kind { - CapabilityKind::Display => 0, - CapabilityKind::Input => 1, - CapabilityKind::AudioPlayback => 2, - CapabilityKind::AudioCapture => 3, - CapabilityKind::Camera => 4, - CapabilityKind::Storage => 5, - CapabilityKind::Network => 6, - CapabilityKind::Gps => 7, - CapabilityKind::Bluetooth => 8, - } - } - fn granted_bits(&self, process: u16) -> u16 { let idx = process as usize; if idx >= MAX_PROCESSES { @@ -56,7 +42,7 @@ impl Server for PermissionManager { if idx >= MAX_PROCESSES { return PermissionResponse::Denied; } - self.grants[idx][Self::kind_index(kind)] = true; + self.grants[idx][kind.index()] = true; PermissionResponse::Granted } PermissionRequest::RevokeCapability { process, kind } => { @@ -64,7 +50,7 @@ impl Server for PermissionManager { if idx >= MAX_PROCESSES { return PermissionResponse::Denied; } - self.grants[idx][Self::kind_index(kind)] = false; + self.grants[idx][kind.index()] = false; PermissionResponse::Revoked } PermissionRequest::CheckCapability { process, kind } => { @@ -72,7 +58,7 @@ impl Server for PermissionManager { if idx >= MAX_PROCESSES { return PermissionResponse::HasCapability(false); } - PermissionResponse::HasCapability(self.grants[idx][Self::kind_index(kind)]) + PermissionResponse::HasCapability(self.grants[idx][kind.index()]) } PermissionRequest::ListGranted { process } => { PermissionResponse::GrantedList(self.granted_bits(process))