dpp/tokens/
emergency_action.rs1use crate::tokens::status::TokenStatus;
2use crate::ProtocolError;
3use bincode::{Decode, Encode};
4use platform_version::version::PlatformVersion;
5#[cfg(feature = "serde-conversion")]
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Copy, Default, Encode, Decode, PartialOrd, PartialEq, Eq)]
9#[cfg_attr(
10 feature = "serde-conversion",
11 derive(Serialize, Deserialize),
12 serde(rename_all = "camelCase")
13)]
14pub enum TokenEmergencyAction {
15 #[default]
16 Pause = 0,
17 Resume = 1,
18}
19
20#[cfg(all(feature = "json-conversion", feature = "serde-conversion"))]
21impl crate::serialization::JsonConvertible for TokenEmergencyAction {}
22
23#[cfg(all(feature = "value-conversion", feature = "serde-conversion"))]
24impl crate::serialization::ValueConvertible for TokenEmergencyAction {}
25
26impl TokenEmergencyAction {
27 pub fn paused(&self) -> bool {
28 matches!(self, TokenEmergencyAction::Pause)
29 }
30 pub fn resulting_status(
31 &self,
32 platform_version: &PlatformVersion,
33 ) -> Result<TokenStatus, ProtocolError> {
34 match self {
35 TokenEmergencyAction::Pause => TokenStatus::new(true, platform_version),
36 TokenEmergencyAction::Resume => TokenStatus::new(false, platform_version),
37 }
38 }
39}
40
41#[cfg(all(
42 test,
43 feature = "json-conversion",
44 feature = "value-conversion",
45 feature = "serde-conversion"
46))]
47mod json_convertible_tests {
48 use super::*;
49 use platform_value::platform_value;
50 use serde_json::json;
51
52 #[test]
57 fn json_round_trip_pause() {
58 use crate::serialization::JsonConvertible;
59 let original = TokenEmergencyAction::Pause;
60 let json = original.to_json().expect("to_json");
61 assert_eq!(json, json!("pause"));
62 let recovered = TokenEmergencyAction::from_json(json).expect("from_json");
63 assert_eq!(original, recovered);
64 }
65
66 #[test]
67 fn json_round_trip_resume() {
68 use crate::serialization::JsonConvertible;
69 let original = TokenEmergencyAction::Resume;
70 let json = original.to_json().expect("to_json");
71 assert_eq!(json, json!("resume"));
72 let recovered = TokenEmergencyAction::from_json(json).expect("from_json");
73 assert_eq!(original, recovered);
74 }
75
76 #[test]
77 fn value_round_trip_pause() {
78 use crate::serialization::ValueConvertible;
79 let original = TokenEmergencyAction::Pause;
80 let value = original.to_object().expect("to_object");
81 assert_eq!(value, platform_value!("pause"));
82 let recovered = TokenEmergencyAction::from_object(value).expect("from_object");
83 assert_eq!(original, recovered);
84 }
85
86 #[test]
87 fn value_round_trip_resume() {
88 use crate::serialization::ValueConvertible;
89 let original = TokenEmergencyAction::Resume;
90 let value = original.to_object().expect("to_object");
91 assert_eq!(value, platform_value!("resume"));
92 let recovered = TokenEmergencyAction::from_object(value).expect("from_object");
93 assert_eq!(original, recovered);
94 }
95}