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