use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize)]
pub struct PermissionRequest {
pub id: String,
pub permission: String,
#[serde(default)]
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum PermissionReply {
Once,
Always,
Reject,
}
#[derive(Debug, Clone, Deserialize)]
pub struct QuestionOption {
pub label: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct QuestionInfo {
pub question: String,
#[serde(default)]
pub options: Vec<QuestionOption>,
#[serde(default = "default_true")]
pub custom: bool,
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Deserialize)]
pub struct QuestionRequest {
pub id: String,
#[serde(default)]
pub questions: Vec<QuestionInfo>,
}
#[derive(Debug, Clone)]
pub enum PendingApproval {
Permission(PermissionRequest),
Question(QuestionRequest),
}
impl PendingApproval {
pub fn id(&self) -> &str {
match self {
PendingApproval::Permission(r) => &r.id,
PendingApproval::Question(r) => &r.id,
}
}
}