1use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
7pub struct ConsoleSurface {
8 pub name: String,
9 pub label: String,
10 pub area: ConsoleArea,
11 pub route: String,
12 pub package: ConsolePackage,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub icon: Option<String>,
15 #[serde(default)]
16 pub required_capabilities: Vec<String>,
17 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub navigation: Option<ConsoleNavigation>,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
22pub struct ConsoleContribution {
23 pub target: String,
24 pub target_version: u32,
25 pub label: String,
26 pub action: ConsoleContributionAction,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub icon: Option<String>,
29 #[serde(default)]
30 pub required_capabilities: Vec<String>,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
34pub struct ConsoleSlot {
35 pub id: String,
36 pub version: u32,
37 pub label: String,
38 #[serde(default)]
39 pub accepts: Vec<ConsoleContributionKind>,
40 #[serde(default)]
41 pub context: Vec<ConsoleSlotContext>,
42}
43
44#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
45#[serde(rename_all = "snake_case")]
46#[non_exhaustive]
47pub enum ConsoleContributionKind {
48 AdminAction,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
52pub struct ConsoleSlotContext {
53 pub name: String,
54 #[serde(default)]
55 pub fields: Vec<ConsoleSlotContextField>,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
59pub struct ConsoleSlotContextField {
60 pub name: String,
61 pub field_type: ConsoleSlotContextFieldType,
62 #[serde(default)]
63 pub required: bool,
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
67#[serde(rename_all = "snake_case")]
68#[non_exhaustive]
69pub enum ConsoleSlotContextFieldType {
70 String,
71 Boolean,
72 Number,
73 Timestamp,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
77#[serde(tag = "kind", rename_all = "snake_case")]
78#[non_exhaustive]
79pub enum ConsoleContributionAction {
80 AdminAction {
81 module: String,
82 name: String,
83 #[serde(default)]
84 input_bindings: Vec<ConsoleActionInputBinding>,
85 },
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
89pub struct ConsoleActionInputBinding {
90 pub input: String,
91 pub value: ConsoleActionInputValue,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
95#[serde(tag = "kind", rename_all = "snake_case")]
96#[non_exhaustive]
97pub enum ConsoleActionInputValue {
98 SlotContext { path: String },
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
102#[serde(rename_all = "snake_case")]
103#[non_exhaustive]
104pub enum ConsoleArea {
105 Runtime,
106 Operations,
107 Data,
108 Configuration,
109}
110
111#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
112pub struct ConsolePackage {
113 pub name: String,
114 pub export: String,
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
118pub struct ConsoleNavigation {
119 pub workspace: ConsoleWorkspaceRef,
120 #[serde(default, skip_serializing_if = "Option::is_none")]
121 pub group: Option<ConsoleNavigationGroup>,
122 #[serde(default, skip_serializing_if = "Option::is_none")]
123 pub order: Option<i32>,
124}
125
126#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
127pub struct ConsoleWorkspaceRef {
128 pub id: String,
129 pub label: String,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
131 pub icon: Option<String>,
132}
133
134#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
135pub struct ConsoleNavigationGroup {
136 pub id: String,
137 pub label: String,
138 #[serde(default, skip_serializing_if = "Option::is_none")]
139 pub icon: Option<String>,
140 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub order: Option<i32>,
142}