dpp/data_contract/conversion/serde/
mod.rs1use crate::data_contract::serialized_version::DataContractInSerializationFormat;
2use crate::prelude::DataContract;
3use crate::version::PlatformVersionCurrentVersion;
4use crate::ProtocolError;
5use platform_version::version::PlatformVersion;
6use platform_version::TryIntoPlatformVersioned;
7use serde::{Deserialize, Deserializer, Serialize, Serializer};
8
9impl Serialize for DataContract {
10 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
11 where
12 S: Serializer,
13 {
14 let current_version =
15 PlatformVersion::get_current().map_err(|e| serde::ser::Error::custom(e.to_string()))?;
16 let data_contract_in_serialization_format: DataContractInSerializationFormat = self
17 .try_into_platform_versioned(current_version)
18 .map_err(|e: ProtocolError| serde::ser::Error::custom(format!("expected to be able to serialize data contract into its serialized version: {}", e)))?;
19 data_contract_in_serialization_format.serialize(serializer)
20 }
21}
22
23impl<'de> Deserialize<'de> for DataContract {
24 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
25 where
26 D: Deserializer<'de>,
27 {
28 let serialization_format = DataContractInSerializationFormat::deserialize(deserializer)?;
29 let current_version = PlatformVersion::get_current().map_err(|e| {
30 serde::de::Error::custom(format!(
31 "expected to be able to get current platform version: {}",
32 e
33 ))
34 })?;
35 DataContract::try_from_platform_versioned(
37 serialization_format,
38 true,
39 &mut vec![],
40 current_version,
41 )
42 .map_err(serde::de::Error::custom)
43 }
44}