acts_channel/model/
message.rs1use crate::Vars;
2use core::fmt;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
6pub enum MessageState {
7 #[default]
8 None,
9 Created,
10 Completed,
11 Submitted,
12 Backed,
13 Cancelled,
14 Aborted,
15 Skipped,
16 Error,
17 Removed,
18}
19
20#[derive(Default, Serialize, Deserialize, Clone, Debug)]
21pub struct Model {
22 pub id: String,
24
25 pub tag: String,
27
28 pub name: String,
30}
31#[derive(Default, Serialize, Deserialize, Clone, Debug)]
32pub struct Message {
33 pub id: String,
35
36 pub tid: String,
38
39 pub nid: String,
41
42 pub mid: String,
44
45 pub name: String,
47
48 pub state: String,
50
51 pub r#type: String,
54
55 pub source: String,
57
58 pub model: Model,
59
60 pub pid: String,
62
63 pub key: String,
65
66 pub inputs: Vars,
68
69 pub outputs: Vars,
71
72 pub tag: String,
75
76 pub start_time: i64,
78
79 pub end_time: i64,
81
82 pub retry_times: i32,
84}
85
86impl Message {
87 pub fn state(&self) -> MessageState {
88 let state = self.state.as_str().into();
89 state
90 }
91
92 pub fn is_key(&self, key: &str) -> bool {
93 self.key == key
94 }
95
96 pub fn is_state(&self, state: &str) -> bool {
97 self.state == state
98 }
99
100 pub fn is_type(&self, t: &str) -> bool {
101 self.r#type == t
102 }
103
104 pub fn is_source(&self, t: &str) -> bool {
105 self.source == t
106 }
107
108 pub fn is_tag(&self, tag: &str) -> bool {
109 self.tag == tag
110 }
111
112 pub fn type_of(&self, mtype: &str) -> Option<&Self> {
113 if self.r#type == mtype {
114 return Some(self);
115 }
116 None
117 }
118
119 pub fn tag_of(&self, tag: &str) -> Option<&Self> {
120 if tag == self.tag {
121 return Some(self);
122 }
123
124 None
125 }
126
127 pub fn key_of(&self, key: &str) -> Option<&Self> {
128 if key == self.key {
129 return Some(self);
130 }
131
132 None
133 }
134
135 pub fn cost(&self) -> i64 {
137 let state: MessageState = self.state.as_str().into();
138 if state.is_completed() {
139 return self.end_time - self.start_time;
140 }
141
142 0
143 }
144}
145
146impl MessageState {
147 pub fn is_completed(&self) -> bool {
148 matches!(
149 self,
150 MessageState::Completed
151 | MessageState::Cancelled
152 | MessageState::Submitted
153 | MessageState::Backed
154 | MessageState::Error
155 | MessageState::Skipped
156 | MessageState::Aborted
157 | MessageState::Removed
158 )
159 }
160}
161
162impl fmt::Display for MessageState {
163 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
164 let s: String = self.into();
165 f.write_str(&s)
166 }
167}
168
169impl From<&MessageState> for String {
170 fn from(state: &MessageState) -> Self {
171 message_state_to_str(state)
172 }
173}
174
175impl From<&str> for MessageState {
176 fn from(str: &str) -> Self {
177 str_to_message_state(str)
178 }
179}
180
181impl From<String> for MessageState {
182 fn from(str: String) -> Self {
183 str_to_message_state(&str)
184 }
185}
186
187fn message_state_to_str(state: &MessageState) -> String {
188 match state {
189 MessageState::None => "none".to_string(),
190 MessageState::Aborted => "aborted".to_string(),
191 MessageState::Backed => "backed".to_string(),
192 MessageState::Cancelled => "cancelled".to_string(),
193 MessageState::Completed => "completed".to_string(),
194 MessageState::Created => "created".to_string(),
195 MessageState::Skipped => "skipped".to_string(),
196 MessageState::Submitted => "submitted".to_string(),
197 MessageState::Error => "error".to_string(),
198 MessageState::Removed => "removed".to_string(),
199 }
200}
201
202fn str_to_message_state(s: &str) -> MessageState {
203 match s {
204 "aborted" => MessageState::Aborted,
205 "backed" => MessageState::Backed,
206 "cancelled" => MessageState::Cancelled,
207 "completed" => MessageState::Completed,
208 "created" => MessageState::Created,
209 "skipped" => MessageState::Skipped,
210 "submitted" => MessageState::Submitted,
211 "error" => MessageState::Error,
212 "removed" => MessageState::Removed,
213 "none" => MessageState::None,
214 _ => MessageState::None,
215 }
216}