dpp/identity/identity_public_key/conversion/json/
mod.rs1mod v0;
2use crate::identity::identity_public_key::v0::IdentityPublicKeyV0;
3use crate::identity::IdentityPublicKey;
4use crate::version::PlatformVersion;
5use crate::ProtocolError;
6use serde_json::Value as JsonValue;
7pub use v0::IdentityPublicKeyJsonConversionMethodsV0;
8
9impl IdentityPublicKeyJsonConversionMethodsV0 for IdentityPublicKey {
10 fn to_json(&self) -> Result<JsonValue, ProtocolError> {
11 match self {
12 IdentityPublicKey::V0(key) => key.to_json(),
13 }
14 }
15
16 fn to_json_object(&self) -> Result<JsonValue, ProtocolError> {
17 match self {
18 IdentityPublicKey::V0(key) => key.to_json_object(),
19 }
20 }
21
22 fn from_json_object(
23 raw_object: JsonValue,
24 platform_version: &PlatformVersion,
25 ) -> Result<Self, ProtocolError>
26 where
27 Self: Sized,
28 {
29 match platform_version
30 .dpp
31 .identity_versions
32 .identity_key_structure_version
33 {
34 0 => {
35 IdentityPublicKeyV0::from_json_object(raw_object, platform_version).map(Into::into)
36 }
37 version => Err(ProtocolError::UnknownVersionMismatch {
38 method: "IdentityPublicKey::from_json_object".to_string(),
39 known_versions: vec![0],
40 received: version,
41 }),
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49 use crate::identity::identity_public_key::v0::IdentityPublicKeyV0;
50 use crate::identity::{KeyType, Purpose, SecurityLevel};
51 use platform_value::BinaryData;
52 use platform_version::version::LATEST_PLATFORM_VERSION;
53
54 fn wrapper(disabled_at: Option<u64>) -> IdentityPublicKey {
55 IdentityPublicKey::V0(IdentityPublicKeyV0 {
56 id: 2,
57 purpose: Purpose::AUTHENTICATION,
58 security_level: SecurityLevel::MASTER,
59 contract_bounds: None,
60 key_type: KeyType::ECDSA_SECP256K1,
61 read_only: false,
62 data: BinaryData::new(vec![0x77; 33]),
63 disabled_at,
64 })
65 }
66
67 #[test]
68 fn to_json_delegates_to_v0() {
69 let key = wrapper(None);
70 let json = key.to_json().expect("to_json");
71 let IdentityPublicKey::V0(inner) = &key;
72 assert_eq!(json, inner.to_json().unwrap());
73 }
74
75 #[test]
76 fn to_json_object_delegates_to_v0() {
77 let key = wrapper(None);
78 let json = key.to_json_object().expect("to_json_object");
79 let IdentityPublicKey::V0(inner) = &key;
80 assert_eq!(json, inner.to_json_object().unwrap());
81 }
82
83 #[test]
84 fn from_json_object_roundtrip() {
85 let key = wrapper(Some(1234));
86 let json = key.to_json().expect("to_json");
87 let back = IdentityPublicKey::from_json_object(json, LATEST_PLATFORM_VERSION).unwrap();
88 assert_eq!(back, key);
89 }
90
91 #[test]
92 fn from_json_object_missing_fields_errors() {
93 let json = serde_json::json!({ "id": 0 });
94 let result = IdentityPublicKey::from_json_object(json, LATEST_PLATFORM_VERSION);
95 assert!(result.is_err());
96 }
97}