dpp/tokens/info/
mod.rs

1#[cfg(all(
2    feature = "json-conversion",
3    any(feature = "fixtures-and-mocks", feature = "serde-conversion")
4))]
5use crate::serialization::JsonConvertible;
6#[cfg(any(feature = "fixtures-and-mocks", feature = "value-conversion"))]
7use crate::serialization::ValueConvertible;
8use crate::tokens::info::v0::IdentityTokenInfoV0;
9use crate::ProtocolError;
10use bincode::Encode;
11use derive_more::From;
12use platform_serialization::de::Decode;
13use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
14use platform_version::version::PlatformVersion;
15use platform_versioning::PlatformVersioned;
16mod methods;
17pub mod v0;
18
19#[cfg_attr(
20    all(
21        feature = "json-conversion",
22        any(feature = "fixtures-and-mocks", feature = "serde-conversion")
23    ),
24    derive(JsonConvertible)
25)]
26#[derive(
27    Debug,
28    Clone,
29    Encode,
30    Decode,
31    PlatformDeserialize,
32    PlatformSerialize,
33    PlatformVersioned,
34    From,
35    PartialEq,
36)]
37#[platform_serialize(unversioned)] //versioned directly, no need to use platform_version
38#[cfg_attr(
39    any(feature = "fixtures-and-mocks", feature = "serde-conversion"),
40    derive(serde::Serialize, serde::Deserialize),
41    serde(tag = "$formatVersion")
42)]
43#[cfg_attr(
44    any(feature = "fixtures-and-mocks", feature = "value-conversion"),
45    derive(ValueConvertible)
46)]
47pub enum IdentityTokenInfo {
48    #[cfg_attr(
49        any(feature = "fixtures-and-mocks", feature = "serde-conversion"),
50        serde(rename = "0")
51    )]
52    V0(IdentityTokenInfoV0),
53}
54
55impl IdentityTokenInfo {
56    pub fn new(frozen: bool, platform_version: &PlatformVersion) -> Result<Self, ProtocolError> {
57        match platform_version
58            .dpp
59            .token_versions
60            .identity_token_info_default_structure_version
61        {
62            0 => Ok(IdentityTokenInfo::V0(IdentityTokenInfoV0 { frozen })),
63            version => Err(ProtocolError::UnknownVersionMismatch {
64                method: "IdentityTokenInfo::new".to_string(),
65                known_versions: vec![0],
66                received: version,
67            }),
68        }
69    }
70}
71
72#[cfg(all(
73    test,
74    feature = "json-conversion",
75    any(feature = "fixtures-and-mocks", feature = "serde-conversion")
76))]
77mod tests {
78    use super::*;
79    use crate::serialization::JsonConvertible;
80
81    #[test]
82    fn identity_token_info_json_round_trip() {
83        let info = IdentityTokenInfo::V0(IdentityTokenInfoV0 { frozen: true });
84
85        let json = info.to_json().expect("to_json should succeed");
86
87        // Verify the version tag
88        assert_eq!(
89            json["$formatVersion"].as_str().unwrap(),
90            "0",
91            "Version tag should be '0'"
92        );
93
94        // Verify the boolean field
95        assert_eq!(json["frozen"].as_bool().unwrap(), true);
96
97        // round-trip
98        let restored = IdentityTokenInfo::from_json(json).expect("from_json should succeed");
99        assert_eq!(info, restored);
100    }
101
102    #[test]
103    fn identity_token_info_unfrozen_json_round_trip() {
104        let info = IdentityTokenInfo::V0(IdentityTokenInfoV0 { frozen: false });
105
106        let json = info.to_json().expect("to_json should succeed");
107        let restored = IdentityTokenInfo::from_json(json).expect("from_json should succeed");
108        assert_eq!(info, restored);
109    }
110}