Skip to main content

dpp/group/
group_action_status.rs

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