1#[cfg(feature = "json-conversion")]
2use crate::serialization::JsonConvertible;
3#[cfg(feature = "value-conversion")]
4use crate::serialization::ValueConvertible;
5use crate::tokens::status::v0::TokenStatusV0;
6use crate::ProtocolError;
7use bincode::Encode;
8use derive_more::From;
9use platform_serialization::de::Decode;
10use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
11use platform_version::version::PlatformVersion;
12use platform_versioning::PlatformVersioned;
13mod methods;
14pub mod v0;
15
16#[cfg_attr(
17 all(feature = "json-conversion", feature = "serde-conversion"),
18 derive(JsonConvertible)
19)]
20#[derive(
21 Debug,
22 Clone,
23 Encode,
24 Decode,
25 PlatformDeserialize,
26 PlatformSerialize,
27 PlatformVersioned,
28 From,
29 PartialEq,
30)]
31#[cfg_attr(
32 feature = "serde-conversion",
33 derive(serde::Serialize, serde::Deserialize),
34 serde(tag = "$formatVersion")
35)]
36#[cfg_attr(feature = "value-conversion", derive(ValueConvertible))]
37#[platform_serialize(unversioned)] pub enum TokenStatus {
39 #[cfg_attr(feature = "serde-conversion", serde(rename = "0"))]
40 V0(TokenStatusV0),
41}
42
43impl TokenStatus {
44 pub fn new(paused: bool, platform_version: &PlatformVersion) -> Result<Self, ProtocolError> {
45 match platform_version
46 .dpp
47 .token_versions
48 .identity_token_status_default_structure_version
49 {
50 0 => Ok(TokenStatus::V0(TokenStatusV0 { paused })),
51 version => Err(ProtocolError::UnknownVersionMismatch {
52 method: "IdentityTokenStatus::new".to_string(),
53 known_versions: vec![0],
54 received: version,
55 }),
56 }
57 }
58}
59
60#[cfg(all(test, feature = "json-conversion"))]
61mod tests {
62 use super::*;
63 use crate::serialization::JsonConvertible;
64
65 #[test]
66 fn token_status_json_round_trip() {
67 let status = TokenStatus::V0(TokenStatusV0 { paused: true });
68
69 let json = status.to_json().expect("to_json should succeed");
70
71 assert_eq!(json["$formatVersion"].as_str().unwrap(), "0");
72 assert_eq!(json["paused"].as_bool().unwrap(), true);
73
74 let restored = TokenStatus::from_json(json).expect("from_json should succeed");
75 assert_eq!(status, restored);
76 }
77}