dpp/tokens/contract_info/
mod.rs

1use crate::data_contract::TokenContractPosition;
2use crate::tokens::contract_info::v0::TokenContractInfoV0;
3use crate::ProtocolError;
4use bincode::Encode;
5use derive_more::From;
6use platform_serialization::de::Decode;
7use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
8use platform_value::Identifier;
9use platform_version::version::PlatformVersion;
10use platform_versioning::PlatformVersioned;
11
12mod methods;
13pub mod v0;
14
15#[derive(
16    Debug,
17    Clone,
18    Encode,
19    Decode,
20    PlatformDeserialize,
21    PlatformSerialize,
22    PlatformVersioned,
23    From,
24    PartialEq,
25)]
26#[platform_serialize(unversioned)] //versioned directly, no need to use platform_version
27#[cfg_attr(
28    any(feature = "fixtures-and-mocks", feature = "serde-conversion"),
29    derive(serde::Serialize, serde::Deserialize),
30    serde(untagged)
31)]
32pub enum TokenContractInfo {
33    V0(TokenContractInfoV0),
34}
35
36impl TokenContractInfo {
37    pub fn new(
38        contract_id: Identifier,
39        token_contract_position: TokenContractPosition,
40        platform_version: &PlatformVersion,
41    ) -> Result<Self, ProtocolError> {
42        match platform_version
43            .dpp
44            .token_versions
45            .token_contract_info_default_structure_version
46        {
47            0 => Ok(TokenContractInfo::V0(TokenContractInfoV0 {
48                contract_id,
49                token_contract_position,
50            })),
51            version => Err(ProtocolError::UnknownVersionMismatch {
52                method: "TokenContractInfo::new".to_string(),
53                known_versions: vec![0],
54                received: version,
55            }),
56        }
57    }
58}