Skip to main content

acts_next/store/data/
message.rs

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