use serde::Serialize;
use crate::bidi::BiDi;
use crate::bidi::command::{BidiCommand, Empty};
use crate::bidi::error::BidiError;
use crate::bidi::ids::UserContextId;
use crate::common::protocol::string_enum;
string_enum! {
pub enum PermissionState {
Granted = "granted",
Denied = "denied",
Prompt = "prompt",
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetPermission {
pub descriptor: serde_json::Value,
pub state: PermissionState,
pub origin: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_context: Option<UserContextId>,
}
impl BidiCommand for SetPermission {
const METHOD: &'static str = "permissions.setPermission";
type Returns = Empty;
}
#[derive(Debug)]
pub struct PermissionsModule<'a> {
bidi: &'a BiDi,
}
impl<'a> PermissionsModule<'a> {
pub(crate) fn new(bidi: &'a BiDi) -> Self {
Self {
bidi,
}
}
pub async fn set_permission(
&self,
descriptor: serde_json::Value,
state: PermissionState,
origin: impl Into<String>,
) -> Result<(), BidiError> {
self.bidi
.send(SetPermission {
descriptor,
state,
origin: origin.into(),
user_context: None,
})
.await?;
Ok(())
}
}