dpp/tokens/contract_info/
mod.rs1use 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)] #[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}