opencode_voice/approval/
types.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Deserialize)]
7pub struct PermissionRequest {
8 pub id: String,
9 pub permission: String,
10 #[serde(default)]
11 pub metadata: serde_json::Value,
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize)]
16#[serde(rename_all = "lowercase")]
17pub enum PermissionReply {
18 Once,
19 Always,
20 Reject,
21}
22
23#[derive(Debug, Clone, Deserialize)]
25pub struct QuestionOption {
26 pub label: String,
27}
28
29#[derive(Debug, Clone, Deserialize)]
31pub struct QuestionInfo {
32 pub question: String,
33 #[serde(default)]
34 pub options: Vec<QuestionOption>,
35 #[serde(default = "default_true")]
36 pub custom: bool,
37}
38
39fn default_true() -> bool {
40 true
41}
42
43#[derive(Debug, Clone, Deserialize)]
45pub struct QuestionRequest {
46 pub id: String,
47 #[serde(default)]
48 pub questions: Vec<QuestionInfo>,
49}
50
51#[derive(Debug, Clone)]
53pub enum PendingApproval {
54 Permission(PermissionRequest),
55 Question(QuestionRequest),
56}
57
58impl PendingApproval {
59 pub fn id(&self) -> &str {
61 match self {
62 PendingApproval::Permission(r) => &r.id,
63 PendingApproval::Question(r) => &r.id,
64 }
65 }
66}