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