dpp/identity/v0/conversion/
json.rs

1use crate::identity::conversion::json::IdentityJsonConversionMethodsV0;
2use crate::identity::conversion::platform_value::IdentityPlatformValueConversionMethodsV0;
3use crate::identity::{identity_public_key, IdentityV0, IDENTIFIER_FIELDS_RAW_OBJECT};
4use crate::ProtocolError;
5use platform_value::{ReplacementType, Value};
6use serde_json::Value as JsonValue;
7use std::convert::TryInto;
8
9impl IdentityJsonConversionMethodsV0 for IdentityV0 {
10    fn to_json_object(&self) -> Result<JsonValue, ProtocolError> {
11        self.to_cleaned_object()?
12            .try_into_validating_json()
13            .map_err(ProtocolError::ValueError)
14    }
15
16    fn to_json(&self) -> Result<JsonValue, ProtocolError> {
17        self.to_cleaned_object()?
18            .try_into()
19            .map_err(ProtocolError::ValueError)
20    }
21
22    /// Creates an identity from a json structure
23    fn from_json(json_object: JsonValue) -> Result<Self, ProtocolError> {
24        let mut platform_value: Value = json_object.into();
25
26        platform_value
27            .replace_at_paths(IDENTIFIER_FIELDS_RAW_OBJECT, ReplacementType::Identifier)?;
28
29        if let Some(public_keys_array) = platform_value.get_optional_array_mut_ref("publicKeys")? {
30            for public_key in public_keys_array.iter_mut() {
31                public_key.replace_at_paths(
32                    identity_public_key::BINARY_DATA_FIELDS,
33                    ReplacementType::BinaryBytes,
34                )?;
35            }
36        }
37
38        let identity: Self = platform_value::from_value(platform_value)?;
39
40        Ok(identity)
41    }
42}