use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
pub type PlatformPermissionRequirements = BTreeMap<String, Vec<PermissionRequirement>>;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "id", rename_all = "camelCase", deny_unknown_fields)]
pub enum PermissionKey {
LocalNetwork {},
Bluetooth {},
Microphone {},
Reminders {},
Automation {
#[serde(rename = "targetBundleId")]
target_bundle_id: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct PermissionRequirement {
pub permission: PermissionKey,
pub feature: String,
pub reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct PermissionUse {
pub component_id: String,
pub component_name: String,
pub feature: String,
pub reason: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionState {
Unknown,
NotDetermined,
Granted,
Denied,
Restricted,
Unsupported,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionEvidence {
System,
Probe,
Unavailable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionAction {
Request,
OpenSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct HostPermission {
pub permission: PermissionKey,
pub state: PermissionState,
pub evidence: PermissionEvidence,
pub observed_at_ms: Option<i64>,
pub uses: Vec<PermissionUse>,
pub supported_actions: Vec<PermissionAction>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct PermissionDeclarationError {
pub component_id: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct HostPermissions {
pub host_id: String,
pub subject_id: String,
pub subject_name: String,
pub host_version: String,
pub platform: String,
pub observed_at_ms: i64,
pub permissions: Vec<HostPermission>,
pub declaration_errors: Vec<PermissionDeclarationError>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct HostPermissionRequest {
pub host_id: String,
pub permission: PermissionKey,
}
pub const HOST_PERMISSIONS_PATH: &str = "/v1/permissions";
pub const HOST_PERMISSION_REQUEST_PATH: &str = "/internal/permissions/request";
pub const HOST_PERMISSION_SETTINGS_PATH: &str = "/internal/permissions/open-settings";