dpp/tokens/status/
mod.rs

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)] //versioned directly, no need to use platform_version
38pub 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}