dpp/data_contract/conversion/value/
mod.rs

1pub mod v0;
2
3use crate::data_contract::conversion::value::v0::DataContractValueConversionMethodsV0;
4use crate::data_contract::v0::DataContractV0;
5use crate::data_contract::v1::DataContractV1;
6use crate::data_contract::DataContract;
7use crate::version::PlatformVersion;
8use crate::ProtocolError;
9use platform_value::Value;
10
11impl DataContractValueConversionMethodsV0 for DataContract {
12    fn from_value(
13        raw_object: Value,
14        full_validation: bool,
15        platform_version: &PlatformVersion,
16    ) -> Result<Self, ProtocolError> {
17        match platform_version
18            .dpp
19            .contract_versions
20            .contract_structure_version
21        {
22            0 => Ok(
23                DataContractV0::from_value(raw_object, full_validation, platform_version)?.into(),
24            ),
25            1 => Ok(
26                DataContractV1::from_value(raw_object, full_validation, platform_version)?.into(),
27            ),
28            version => Err(ProtocolError::UnknownVersionMismatch {
29                method: "DataContract::from_object".to_string(),
30                known_versions: vec![0, 1],
31                received: version,
32            }),
33        }
34    }
35
36    fn to_value(&self, platform_version: &PlatformVersion) -> Result<Value, ProtocolError> {
37        match self {
38            DataContract::V0(v0) => v0.to_value(platform_version),
39            DataContract::V1(v1) => v1.to_value(platform_version),
40        }
41    }
42
43    fn into_value(self, platform_version: &PlatformVersion) -> Result<Value, ProtocolError> {
44        match self {
45            DataContract::V0(v0) => v0.into_value(platform_version),
46            DataContract::V1(v1) => v1.into_value(platform_version),
47        }
48    }
49}