dpp/data_contract/associated_token/
token_distribution_key.rs1use crate::data_contract::associated_token::token_perpetual_distribution::distribution_recipient::{TokenDistributionRecipient, TokenDistributionResolvedRecipient};
2use crate::errors::ProtocolError;
3use bincode::{Decode, Encode};
4use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
5use platform_value::Identifier;
6use serde::{Deserialize, Serialize};
7use std::fmt;
8use crate::data_contract::associated_token::token_perpetual_distribution::reward_distribution_moment::RewardDistributionMoment;
9use crate::prelude::TimestampMillis;
10
11#[derive(
16 Serialize, Deserialize, Decode, Encode, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Default,
17)]
18pub enum TokenDistributionType {
19 #[default]
21 PreProgrammed = 0,
22
23 Perpetual = 1,
25}
26
27#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)]
32pub enum TokenDistributionTypeWithResolvedRecipient {
33 PreProgrammed(Identifier),
35
36 Perpetual(TokenDistributionResolvedRecipient),
38}
39
40#[derive(Serialize, Deserialize, Decode, Encode, Debug, Clone, PartialEq, Eq, PartialOrd)]
46pub enum TokenDistributionInfo {
47 PreProgrammed(TimestampMillis, Identifier),
50
51 Perpetual(RewardDistributionMoment, TokenDistributionResolvedRecipient),
55}
56
57impl From<TokenDistributionInfo> for TokenDistributionTypeWithResolvedRecipient {
58 fn from(info: TokenDistributionInfo) -> Self {
59 match info {
60 TokenDistributionInfo::PreProgrammed(_, recipient) => {
61 TokenDistributionTypeWithResolvedRecipient::PreProgrammed(recipient)
62 }
63 TokenDistributionInfo::Perpetual(_, recipient) => {
64 TokenDistributionTypeWithResolvedRecipient::Perpetual(recipient)
65 }
66 }
67 }
68}
69
70impl From<&TokenDistributionInfo> for TokenDistributionTypeWithResolvedRecipient {
71 fn from(info: &TokenDistributionInfo) -> Self {
72 match info {
73 TokenDistributionInfo::PreProgrammed(_, recipient) => {
74 TokenDistributionTypeWithResolvedRecipient::PreProgrammed(*recipient)
75 }
76 TokenDistributionInfo::Perpetual(_, recipient) => {
77 TokenDistributionTypeWithResolvedRecipient::Perpetual(recipient.clone())
78 }
79 }
80 }
81}
82
83impl fmt::Display for TokenDistributionType {
84 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
85 match self {
86 TokenDistributionType::PreProgrammed => write!(f, "PreProgrammed"),
87 TokenDistributionType::Perpetual => write!(f, "Perpetual"),
88 }
89 }
90}
91
92#[derive(
93 Serialize,
94 Deserialize,
95 Decode,
96 Encode,
97 PlatformSerialize,
98 PlatformDeserialize,
99 Debug,
100 Clone,
101 PartialEq,
102 Eq,
103)]
104#[platform_serialize(unversioned)]
105pub struct TokenDistributionKey {
106 pub token_id: Identifier,
107 pub recipient: TokenDistributionRecipient,
108 pub distribution_type: TokenDistributionType,
109}