Skip to main content

lenso_contracts/
console.rs

1//! Runtime Console contribution contracts.
2
3use 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}