dpp/tokens/
token_amount_on_contract_token.rs1use crate::balances::credits::TokenAmount;
2use crate::consensus::basic::data_contract::UnknownDocumentActionTokenEffectError;
3use crate::consensus::basic::BasicError;
4use crate::consensus::ConsensusError;
5use crate::data_contract::TokenContractPosition;
6use crate::tokens::gas_fees_paid_by::GasFeesPaidBy;
7use crate::ProtocolError;
8use platform_value::Identifier;
9
10#[derive(Debug, PartialEq, Clone, Copy, Default)]
11pub enum DocumentActionTokenEffect {
12 #[default]
14 TransferTokenToContractOwner,
15 BurnToken,
18}
19
20impl From<DocumentActionTokenEffect> for u8 {
21 fn from(value: DocumentActionTokenEffect) -> Self {
22 match value {
23 DocumentActionTokenEffect::TransferTokenToContractOwner => 0,
24 DocumentActionTokenEffect::BurnToken => 1,
25 }
26 }
27}
28
29impl TryFrom<u8> for DocumentActionTokenEffect {
30 type Error = ProtocolError;
31
32 fn try_from(value: u8) -> Result<Self, Self::Error> {
33 match value {
34 0 => Ok(DocumentActionTokenEffect::TransferTokenToContractOwner),
35 1 => Ok(DocumentActionTokenEffect::BurnToken),
36 other => Err(ProtocolError::ConsensusError(
37 ConsensusError::BasicError(BasicError::UnknownDocumentActionTokenEffectError(
38 UnknownDocumentActionTokenEffectError::new(vec![0, 1], other as u64),
39 ))
40 .into(),
41 )),
42 }
43 }
44}
45
46impl TryFrom<u64> for DocumentActionTokenEffect {
47 type Error = ProtocolError;
48
49 fn try_from(value: u64) -> Result<Self, Self::Error> {
50 u8::try_from(value)
51 .map_err(|_| {
52 ProtocolError::ConsensusError(
53 ConsensusError::BasicError(BasicError::UnknownDocumentActionTokenEffectError(
54 UnknownDocumentActionTokenEffectError::new(vec![0, 1], value),
55 ))
56 .into(),
57 )
58 })?
59 .try_into()
60 }
61}
62
63#[derive(Debug, PartialEq, Clone, Copy, Default)]
64pub struct DocumentActionTokenCost {
65 pub contract_id: Option<Identifier>,
67 pub token_contract_position: TokenContractPosition,
69 pub token_amount: TokenAmount,
71 pub effect: DocumentActionTokenEffect,
73 pub gas_fees_paid_by: GasFeesPaidBy,
75}