Skip to main content

dpp/group/
group_action_status.rs

1use anyhow::bail;
2
3#[derive(Debug, PartialEq, PartialOrd, Clone, Copy, Eq)]
4#[cfg_attr(
5    feature = "serde-conversion",
6    derive(serde::Serialize, serde::Deserialize),
7    serde(rename_all = "camelCase")
8)]
9pub enum GroupActionStatus {
10    ActionActive,
11    ActionClosed,
12}
13
14#[cfg(all(feature = "json-conversion", feature = "serde-conversion"))]
15impl crate::serialization::JsonConvertible for GroupActionStatus {}
16
17#[cfg(all(feature = "value-conversion", feature = "serde-conversion"))]
18impl crate::serialization::ValueConvertible for GroupActionStatus {}
19
20#[cfg(all(
21    test,
22    feature = "json-conversion",
23    feature = "value-conversion",
24    feature = "serde-conversion"
25))]
26mod json_convertible_tests {
27    use super::*;
28    use platform_value::Value;
29    use serde_json::json;
30
31    // Externally tagged unit-only enum with `rename_all = "camelCase"`:
32    // serializes as a bare string (`"actionActive"` / `"actionClosed"`).
33
34    #[test]
35    fn json_round_trip_action_active() {
36        use crate::serialization::JsonConvertible;
37        let original = GroupActionStatus::ActionActive;
38        let json = original.to_json().expect("to_json");
39        assert_eq!(json, json!("actionActive"));
40        let recovered = GroupActionStatus::from_json(json).expect("from_json");
41        assert_eq!(original, recovered);
42    }
43
44    #[test]
45    fn json_round_trip_action_closed() {
46        use crate::serialization::JsonConvertible;
47        let original = GroupActionStatus::ActionClosed;
48        let json = original.to_json().expect("to_json");
49        assert_eq!(json, json!("actionClosed"));
50        let recovered = GroupActionStatus::from_json(json).expect("from_json");
51        assert_eq!(original, recovered);
52    }
53
54    #[test]
55    fn value_round_trip_action_active() {
56        use crate::serialization::ValueConvertible;
57        let original = GroupActionStatus::ActionActive;
58        let value = original.to_object().expect("to_object");
59        assert_eq!(value, Value::Text("actionActive".to_string()));
60        let recovered = GroupActionStatus::from_object(value).expect("from_object");
61        assert_eq!(original, recovered);
62    }
63
64    #[test]
65    fn value_round_trip_action_closed() {
66        use crate::serialization::ValueConvertible;
67        let original = GroupActionStatus::ActionClosed;
68        let value = original.to_object().expect("to_object");
69        assert_eq!(value, Value::Text("actionClosed".to_string()));
70        let recovered = GroupActionStatus::from_object(value).expect("from_object");
71        assert_eq!(original, recovered);
72    }
73}
74
75impl TryFrom<u8> for GroupActionStatus {
76    type Error = anyhow::Error;
77    fn try_from(value: u8) -> Result<Self, Self::Error> {
78        match value {
79            0 => Ok(Self::ActionActive),
80            1 => Ok(Self::ActionClosed),
81            value => bail!("unrecognized action status: {}", value),
82        }
83    }
84}
85
86impl TryFrom<i32> for GroupActionStatus {
87    type Error = anyhow::Error;
88    fn try_from(value: i32) -> Result<Self, Self::Error> {
89        match value {
90            0 => Ok(Self::ActionActive),
91            1 => Ok(Self::ActionClosed),
92            value => bail!("unrecognized action status: {}", value),
93        }
94    }
95}