rocketmq_client_rust/producer/
send_status.rs1use std::fmt;
18
19use serde::Deserialize;
20use serde::Deserializer;
21use serde::Serialize;
22use serde::Serializer;
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
25pub enum SendStatus {
26 #[default]
27 SendOk,
28 FlushDiskTimeout,
29 FlushSlaveTimeout,
30 SlaveNotAvailable,
31}
32
33impl Serialize for SendStatus {
34 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
35 where
36 S: Serializer,
37 {
38 let value = match self {
39 SendStatus::SendOk => "SEND_OK",
40 SendStatus::FlushDiskTimeout => "FLUSH_DISK_TIMEOUT",
41 SendStatus::FlushSlaveTimeout => "FLUSH_SLAVE_TIMEOUT",
42 SendStatus::SlaveNotAvailable => "SLAVE_NOT_AVAILABLE",
43 };
44 serializer.serialize_str(value)
45 }
46}
47
48impl<'de> Deserialize<'de> for SendStatus {
49 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
50 where
51 D: Deserializer<'de>,
52 {
53 struct StoreTypeVisitor;
54
55 impl serde::de::Visitor<'_> for StoreTypeVisitor {
56 type Value = SendStatus;
57
58 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
59 formatter.write_str("a string representing SendStatus")
60 }
61
62 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
63 where
64 E: serde::de::Error,
65 {
66 match value {
67 "SEND_OK" => Ok(SendStatus::SendOk),
68 "FLUSH_DISK_TIMEOUT" => Ok(SendStatus::FlushDiskTimeout),
69 "FLUSH_SLAVE_TIMEOUT" => Ok(SendStatus::FlushSlaveTimeout),
70 "SLAVE_NOT_AVAILABLE" => Ok(SendStatus::SlaveNotAvailable),
71 _ => Err(serde::de::Error::unknown_variant(
72 value,
73 &[
74 "SEND_OK",
75 "FLUSH_DISK_TIMEOUT",
76 "FLUSH_SLAVE_TIMEOUT",
77 "SLAVE_NOT_AVAILABLE",
78 ],
79 )),
80 }
81 }
82 }
83 deserializer.deserialize_str(StoreTypeVisitor)
84 }
85}