Skip to main content

roder_api/
capabilities.rs

1use serde::{Deserialize, Serialize};
2
3pub type CapabilityId = String;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd, Ord)]
6#[serde(rename_all = "snake_case")]
7pub enum CapabilityDecision {
8    Requested,
9    Granted,
10    Denied,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd, Ord)]
14#[serde(rename_all = "camelCase")]
15pub struct CapabilityRequest {
16    pub id: CapabilityId,
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub reason: Option<String>,
19}
20
21impl CapabilityRequest {
22    pub fn new(id: impl Into<CapabilityId>) -> Self {
23        Self {
24            id: id.into(),
25            reason: None,
26        }
27    }
28
29    pub fn with_reason(id: impl Into<CapabilityId>, reason: impl Into<String>) -> Self {
30        Self {
31            id: id.into(),
32            reason: Some(reason.into()),
33        }
34    }
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd, Ord)]
38#[serde(rename_all = "camelCase")]
39pub struct CapabilityGrant {
40    pub id: CapabilityId,
41}
42
43impl CapabilityGrant {
44    pub fn new(id: impl Into<CapabilityId>) -> Self {
45        Self { id: id.into() }
46    }
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd, Ord)]
50#[serde(rename_all = "camelCase")]
51pub struct CapabilityDenial {
52    pub id: CapabilityId,
53    pub reason: String,
54}
55
56impl CapabilityDenial {
57    pub fn new(id: impl Into<CapabilityId>, reason: impl Into<String>) -> Self {
58        Self {
59            id: id.into(),
60            reason: reason.into(),
61        }
62    }
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
66#[serde(rename_all = "camelCase")]
67pub struct CapabilityStatus {
68    pub id: CapabilityId,
69    pub decision: CapabilityDecision,
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub reason: Option<String>,
72}