acts_next/store/data/
message.rs1use crate::MessageState;
2use core::fmt;
3use serde::{Deserialize, Serialize};
4use serde_repr::{Deserialize_repr, Serialize_repr};
5
6#[derive(Default, Debug, Copy, PartialEq, Clone, Serialize_repr, Deserialize_repr)]
7#[repr(i8)]
8pub enum MessageStatus {
9 #[default]
10 Created = 0,
11 Acked = 1,
12 Completed = 2,
13 Error = 3,
14}
15
16#[derive(Default, Deserialize, Serialize, Debug, Clone)]
17pub struct Message {
18 pub id: String,
19 pub tid: String,
20 pub name: String,
21 pub state: MessageState,
22 pub r#type: String,
23 pub source: String,
24 pub model: String,
25 pub pid: String,
26 pub nid: String,
27 pub mid: String,
28 pub key: String,
29 pub inputs: String,
30 pub outputs: String,
31 pub tag: String,
32 pub start_time: i64,
33 pub end_time: i64,
34 pub chan_id: String,
35 pub chan_pattern: String,
36
37 pub create_time: i64,
38 pub update_time: i64,
39 pub retry_times: i32,
40 pub status: MessageStatus,
41 pub timestamp: i64,
42}
43
44impl fmt::Display for MessageStatus {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 f.write_str(match self {
47 MessageStatus::Created => "created",
48 MessageStatus::Acked => "acked",
49 MessageStatus::Completed => "completed",
50 MessageStatus::Error => "error",
51 })
52 }
53}
54
55impl From<i8> for MessageStatus {
56 fn from(value: i8) -> Self {
57 match value {
58 1 => MessageStatus::Acked,
59 2 => MessageStatus::Completed,
60 3 => MessageStatus::Error,
61 _ => MessageStatus::Created,
62 }
63 }
64}
65
66impl From<MessageStatus> for i8 {
67 fn from(val: MessageStatus) -> i8 {
68 match val {
69 MessageStatus::Created => 0,
70 MessageStatus::Acked => 1,
71 MessageStatus::Completed => 2,
72 MessageStatus::Error => 3,
73 }
74 }
75}
76
77impl From<MessageStatus> for i64 {
78 fn from(val: MessageStatus) -> Self {
79 match val {
80 MessageStatus::Created => 0,
81 MessageStatus::Acked => 1,
82 MessageStatus::Completed => 2,
83 MessageStatus::Error => 3,
84 }
85 }
86}
87
88#[cfg(test)]
89mod tests {
90 use super::MessageStatus;
91
92 #[test]
93 fn store_data_message_status_to_i8() {
94 let created: i8 = MessageStatus::Created.into();
95 assert_eq!(created, 0);
96
97 let created: i8 = MessageStatus::Acked.into();
98 assert_eq!(created, 1);
99
100 let created: i8 = MessageStatus::Completed.into();
101 assert_eq!(created, 2);
102
103 let created: i8 = MessageStatus::Error.into();
104 assert_eq!(created, 3);
105 }
106
107 #[test]
108 fn store_data_i8_to_message_status() {
109 let created: MessageStatus = 0.into();
110 assert_eq!(created, MessageStatus::Created);
111
112 let created: MessageStatus = 1.into();
113 assert_eq!(created, MessageStatus::Acked);
114
115 let created: MessageStatus = 2.into();
116 assert_eq!(created, MessageStatus::Completed);
117
118 let created: MessageStatus = 3.into();
119 assert_eq!(created, MessageStatus::Error);
120
121 let created: MessageStatus = 100.into();
122 assert_eq!(created, MessageStatus::Created);
123 }
124
125 #[test]
126 fn store_data_message_status_to_string() {
127 assert_eq!(MessageStatus::Created.to_string(), "created");
128 assert_eq!(MessageStatus::Acked.to_string(), "acked");
129 assert_eq!(MessageStatus::Completed.to_string(), "completed");
130 assert_eq!(MessageStatus::Error.to_string(), "error");
131 }
132}