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)] #[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 assert_eq!(
89 json["$formatVersion"].as_str().unwrap(),
90 "0",
91 "Version tag should be '0'"
92 );
93
94 assert_eq!(json["frozen"].as_bool().unwrap(), true);
96
97 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}