soma_gateway/gateway/
catalog.rs1use std::collections::BTreeMap;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub struct GatewayAction {
5 pub name: &'static str,
6 pub admin_required: bool,
7 pub destructive: bool,
8 pub discovery: bool,
9 pub spawn_validation_required: bool,
10}
11
12#[derive(Debug, Clone, Default)]
13pub struct GatewayActionCatalog {
14 actions: BTreeMap<&'static str, GatewayAction>,
15}
16
17impl GatewayActionCatalog {
18 #[must_use]
19 pub fn standard() -> Self {
20 let mut catalog = Self::default();
21 for &action in STANDARD_ACTIONS {
22 catalog.actions.insert(action.name, action);
23 }
24 catalog
25 }
26
27 #[must_use]
28 pub fn get(&self, name: &str) -> Option<GatewayAction> {
29 self.actions.get(name).copied()
30 }
31
32 #[must_use]
33 pub fn list(&self) -> Vec<GatewayAction> {
34 self.actions.values().copied().collect()
35 }
36}
37
38const STANDARD_ACTIONS: &[GatewayAction] = &[
39 GatewayAction {
40 name: "gateway.list",
41 admin_required: false,
42 destructive: false,
43 discovery: true,
44 spawn_validation_required: false,
45 },
46 GatewayAction {
47 name: "gateway.config.view",
48 admin_required: false,
49 destructive: false,
50 discovery: true,
51 spawn_validation_required: false,
52 },
53 GatewayAction {
54 name: "gateway.test",
55 admin_required: true,
56 destructive: false,
57 discovery: false,
58 spawn_validation_required: true,
59 },
60 GatewayAction {
61 name: "gateway.add",
62 admin_required: true,
63 destructive: false,
64 discovery: false,
65 spawn_validation_required: true,
66 },
67 GatewayAction {
68 name: "gateway.update",
69 admin_required: true,
70 destructive: false,
71 discovery: false,
72 spawn_validation_required: true,
73 },
74 GatewayAction {
75 name: "gateway.import.approve",
76 admin_required: true,
77 destructive: false,
78 discovery: false,
79 spawn_validation_required: true,
80 },
81 GatewayAction {
82 name: "gateway.remove",
83 admin_required: true,
84 destructive: true,
85 discovery: false,
86 spawn_validation_required: false,
87 },
88 GatewayAction {
89 name: "gateway.reload",
90 admin_required: true,
91 destructive: false,
92 discovery: false,
93 spawn_validation_required: false,
94 },
95 GatewayAction {
96 name: "gateway.oauth.start",
97 admin_required: true,
98 destructive: false,
99 discovery: false,
100 spawn_validation_required: false,
101 },
102 GatewayAction {
103 name: "gateway.oauth.status",
104 admin_required: true,
105 destructive: false,
106 discovery: true,
107 spawn_validation_required: false,
108 },
109 GatewayAction {
110 name: "gateway.oauth.clear",
111 admin_required: true,
112 destructive: true,
113 discovery: false,
114 spawn_validation_required: false,
115 },
116];
117
118#[cfg(test)]
119#[path = "catalog_tests.rs"]
120mod tests;