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