astro_run/types/
mod.rs

1mod condition;
2mod context;
3mod envs;
4mod error;
5mod id;
6mod results;
7mod trigger_event;
8mod workflow_state;
9mod workflow_state_event;
10
11pub use condition::*;
12pub use context::*;
13pub use envs::*;
14pub use error::*;
15pub use id::*;
16pub use results::*;
17pub use trigger_event::*;
18pub use workflow_state::*;
19pub use workflow_state_event::*;
20
21use serde::{Deserialize, Serialize};
22
23#[derive(Clone)]
24pub enum GithubAuthorization {
25  PersonalAccessToken(String),
26  GithubApp { app_id: u64, private_key: String },
27}
28
29impl GithubAuthorization {
30  pub fn is_personal_access_token(&self) -> bool {
31    matches!(self, GithubAuthorization::PersonalAccessToken(_))
32  }
33}
34
35#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
36#[serde(rename_all = "snake_case")]
37pub enum WorkflowLogType {
38  Error,
39  Log,
40}
41
42impl std::fmt::Display for WorkflowLogType {
43  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44    match self {
45      WorkflowLogType::Error => write!(f, "error"),
46      WorkflowLogType::Log => write!(f, "log"),
47    }
48  }
49}
50
51impl From<String> for WorkflowLogType {
52  fn from(s: String) -> Self {
53    match s.as_str() {
54      "error" => WorkflowLogType::Error,
55      "log" => WorkflowLogType::Log,
56      _ => WorkflowLogType::Log,
57    }
58  }
59}
60
61#[derive(Serialize, Deserialize, Debug, Clone)]
62pub struct WorkflowLog {
63  pub step_id: StepId,
64  pub log_type: WorkflowLogType,
65  pub message: String,
66  pub time: chrono::DateTime<chrono::Utc>,
67}
68
69impl Default for WorkflowLog {
70  fn default() -> Self {
71    WorkflowLog {
72      step_id: StepId::default(),
73      log_type: WorkflowLogType::Log,
74      message: "".to_string(),
75      time: chrono::Utc::now(),
76    }
77  }
78}
79
80impl WorkflowLog {
81  pub fn is_error(&self) -> bool {
82    self.log_type == WorkflowLogType::Error
83  }
84}
85
86#[cfg(test)]
87mod tests {
88  use super::*;
89
90  #[test]
91  fn test_workflow_log_type() {
92    assert_eq!(
93      WorkflowLogType::Error,
94      WorkflowLogType::from("error".to_string())
95    );
96    assert_eq!(
97      WorkflowLogType::Log,
98      WorkflowLogType::from("log".to_string())
99    );
100    assert_eq!(
101      WorkflowLogType::Log,
102      WorkflowLogType::from("unknown".to_string())
103    );
104  }
105
106  #[test]
107  fn test_workflow_log_type_to_string() {
108    assert_eq!("error", WorkflowLogType::Error.to_string());
109    assert_eq!("log", WorkflowLogType::Log.to_string());
110  }
111
112  #[test]
113  fn test_workflow_log_is_error() {
114    let log = WorkflowLog {
115      log_type: WorkflowLogType::Error,
116      ..Default::default()
117    };
118    assert!(log.is_error());
119
120    let log = WorkflowLog {
121      log_type: WorkflowLogType::Log,
122      ..Default::default()
123    };
124    assert!(!log.is_error());
125  }
126}