drive/state_transition_action/identity/identity_credit_transfer/
mod.rs

1/// transformer
2pub mod transformer;
3/// v0
4pub mod v0;
5
6use crate::state_transition_action::identity::identity_credit_transfer::v0::IdentityCreditTransferTransitionActionV0;
7use derive_more::From;
8use dpp::fee::Credits;
9use dpp::platform_value::Identifier;
10use dpp::prelude::{IdentityNonce, UserFeeIncrease};
11
12/// action
13#[derive(Debug, Clone, From)]
14pub enum IdentityCreditTransferTransitionAction {
15    /// v0
16    V0(IdentityCreditTransferTransitionActionV0),
17}
18
19impl IdentityCreditTransferTransitionAction {
20    /// Nonce
21    pub fn nonce(&self) -> IdentityNonce {
22        match self {
23            IdentityCreditTransferTransitionAction::V0(transition) => transition.nonce,
24        }
25    }
26
27    /// Transfer amount
28    pub fn transfer_amount(&self) -> Credits {
29        match self {
30            IdentityCreditTransferTransitionAction::V0(transition) => transition.transfer_amount,
31        }
32    }
33
34    /// Identity Id
35    pub fn identity_id(&self) -> Identifier {
36        match self {
37            IdentityCreditTransferTransitionAction::V0(transition) => transition.identity_id,
38        }
39    }
40
41    /// Recipient Id
42    pub fn recipient_id(&self) -> Identifier {
43        match self {
44            IdentityCreditTransferTransitionAction::V0(transition) => transition.recipient_id,
45        }
46    }
47
48    /// fee multiplier
49    pub fn user_fee_increase(&self) -> UserFeeIncrease {
50        match self {
51            IdentityCreditTransferTransitionAction::V0(transition) => transition.user_fee_increase,
52        }
53    }
54}
55
56#[cfg(test)]
57mod tests {
58    use super::*;
59    use crate::state_transition_action::identity::identity_credit_transfer::v0::IdentityCreditTransferTransitionActionV0;
60
61    fn make_v0() -> IdentityCreditTransferTransitionActionV0 {
62        IdentityCreditTransferTransitionActionV0 {
63            transfer_amount: 5000,
64            recipient_id: Identifier::from([0xBB; 32]),
65            identity_id: Identifier::from([0xAA; 32]),
66            nonce: 42,
67            user_fee_increase: 3,
68        }
69    }
70
71    #[test]
72    fn test_from_v0() {
73        let v0 = make_v0();
74        let action: IdentityCreditTransferTransitionAction = v0.into();
75        assert!(matches!(
76            action,
77            IdentityCreditTransferTransitionAction::V0(_)
78        ));
79    }
80
81    #[test]
82    fn test_nonce() {
83        let action = IdentityCreditTransferTransitionAction::V0(make_v0());
84        assert_eq!(action.nonce(), 42);
85    }
86
87    #[test]
88    fn test_transfer_amount() {
89        let action = IdentityCreditTransferTransitionAction::V0(make_v0());
90        assert_eq!(action.transfer_amount(), 5000);
91    }
92
93    #[test]
94    fn test_identity_id() {
95        let action = IdentityCreditTransferTransitionAction::V0(make_v0());
96        assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
97    }
98
99    #[test]
100    fn test_recipient_id() {
101        let action = IdentityCreditTransferTransitionAction::V0(make_v0());
102        assert_eq!(action.recipient_id(), Identifier::from([0xBB; 32]));
103    }
104
105    #[test]
106    fn test_user_fee_increase() {
107        let action = IdentityCreditTransferTransitionAction::V0(make_v0());
108        assert_eq!(action.user_fee_increase(), 3);
109    }
110}