acts_next/store/data/
message.rs

1use 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}