Skip to main content

pipedash_plugin_api/
actions.rs

1use serde::{
2    Deserialize,
3    Serialize,
4};
5
6use crate::presentation::DisplayField;
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
9pub struct ActionAvailability {
10    pub allowed: bool,
11    pub reason: Option<String>,
12}
13
14impl ActionAvailability {
15    pub fn allowed(allowed: bool) -> Self {
16        Self {
17            allowed,
18            reason: None,
19        }
20    }
21
22    pub fn blocked(reason: impl Into<String>) -> Self {
23        Self {
24            allowed: false,
25            reason: Some(reason.into()),
26        }
27    }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
31#[serde(rename_all = "snake_case")]
32pub enum RerunStrategy {
33    InPlace,
34    #[default]
35    ReplayInputs,
36    ReconcileCurrent,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
40#[serde(rename_all = "snake_case")]
41pub enum ActionIcon {
42    #[default]
43    Play,
44    Refresh,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
48pub struct PipelineActionState {
49    pub trigger: ActionAvailability,
50    pub cancel: ActionAvailability,
51    pub force_cancel: ActionAvailability,
52    pub enable: ActionAvailability,
53    pub rerun_strategy: RerunStrategy,
54    pub trigger_icon: ActionIcon,
55    pub target: Option<DisplayField>,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
59pub struct RunActionState {
60    pub cancel: ActionAvailability,
61    pub force_cancel: ActionAvailability,
62    pub rerun: ActionAvailability,
63    pub rerun_failed: ActionAvailability,
64    pub review: ActionAvailability,
65    pub watch: bool,
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
69pub struct TriggerResult {
70    pub run_id: Option<String>,
71    pub run_number: Option<i64>,
72}