pipedash_plugin_api/
actions.rs1use 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}